微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

bash – 批量下载PDF

如果有的话,这可能/可能不可能使用bash高兴地在Python中提出建议.

但我想从以下链接下载所有PDF / ePub

https://mises.org/library/books

您可以通过选择PDF然后选择ALL来执行以下操作来选择可用的PDF.您将看到列出的PDF文档列表.

问题是,当您通过列表时,URL似乎没有变化,如果您选择EPUB然后选择ALL,也会出现相同的链接.

因此,如果我使用wget curl,似乎没有办法区分PDF和EPUB.

然后我将使用Calibre将它们转换为PDF / EPub并上传到我的Kindle帐户,这样我就可以在电子管上读取它们的堆栈.

提前致谢..

解决方法:

(从一些提示开始,结果是一个相当庞大的答案.(再次:]))

如果网站上有任何针对批量下载的政策,我无法回答,但作为一个开始.

虽然这是非常特定于站点的,但相同的程序应该适用于类似的站点,因此答案可能对其他站点有用.更像是一个例子.

在那种页面上,我会仔细看看网站,而不是简单地尝试整个网站.一个是免费和付费内容.其次;只是在一大堆中下载所有可能会变得有些混乱,特别是考虑到有多少文件.

隔离索引页面

>无论您在哪个部分,该页面显示相同的网址.但无论是通过查看来源还是仅仅通过其中一个部分,您会看到它至少有两个可能有趣的目标:

PDF : https://mises.org/library/books?book_type=539
EPUB: https://mises.org/library/books?book_type=537

>结果分为10次和10次点击.例如:PDF显示显示1 – 10的535.在底部清除数字我们找到下一个有趣的信息:& page = 1,& page = 2等.

由于有535次点击我们必须下载535/10 = 54页.当page = 0时,实际的最后一页将是page = 53.

这给了我们一个关于下载什么入门的提示. PDF:

https://mises.org/library/books?book_type=539&page=0
https://mises.org/library/books?book_type=539&page=1
...
https://mises.org/library/books?book_type=539&page=53

由于免费的PDF似乎包括免费的EPUB,因此EPUB标签可能不需要这样做.

在这种情况下,最终可能会做类似的事情:

mkdir mises.org
cd mises.org

要么在终端中执行,要么添加到脚本文件中:

for i in {0..53}
do
    curl -o ./"$(printf "pdfl-%03d.html" $i)" "https://mises.org/library/books?book_type=539&page=$i"
done

我们已经有了一个很好的有序结构.

提取相关数据

完成此操作后,下一步是仔细查看其中一个页面.例如pdfl-000.html.

经过快速检查后,我们发现每本书都包含在:

  <div class="panel-body">
     ... book data ...
  </div>

现在所有取决于你想要从这里提取路径的方法是去文件文件url,还是包括元数据和其他糖,如作者,主题,图像等.对于后者你会在Python,Perl等中使用HTML解析器.对于前者,这也可以使用 – 但也可以使用更简单的文本处理工具,如sed,grep等.

在这种情况下,(为简单起见),我选择了前者.

现在经常声明on应该永远不要用regexp等解析HTML,但在这种情况下,我们不是解析文档而只是提取相关数据.因此,特别是因为它不是随机可能的恶意网站,也不是疯狂标记的黑客 – 但简洁和格式良好 – 使用sed等是可以的(恕我直言).

进一步研究pdfl-000.html,我们发现该标题包含在< h2 class =“element-invisible”>中.以.pdf结尾.文档< a的链接有type =“application / pdf. 以此为基础,我们可以快速提取所有标题和目标,例如sed.由于sed的结果在交替行上给出了标题和URI,我们可以将结果传递给paste – – . 由于编号项目很好,我们进一步将其输入awk以添加一些更改的文档名称.如果两个文档具有相同的标题,这也可能节省我们. 在这个粗略的例子中,我们假设没有名称有tab,换行符或“作为其中的一部分.

sed -n -e 's#.*<h2 class="element-invisible"><a [^>]*>\([^<]*\.pdf\)</a>.*</h2>#\1#p' \
    -e 's#.*<a[^>]* href="\([^"]*\)"[^<]*type="application/pdf;.*#"https://mises.org\1"#p' \
    pdfl-* | \
    paste - - | \
    awk -F'\t' '{ printf "curl -o \"%03d-%s\" %s\n",NR,$1,$2 }' > curl.txt

下载

然后它只是做:

mkdir pdf
cd pdf
. ../curl.txt

并等待它下载.结束如下:

001-A Spontaneous Order.pdf
002-Science Technology and Government.pdf
003-Science Technology and Government—Chinese.pdf
004-The Next Generation of Austrian Economics Essays in Honor of Joseph T. Salerno.pdf
005-A Short History of Man — Progress and Decline.pdf
...

边注

>如果您想从文件提取更多信息,请保留pdfl-NNN.html文件.
>使用URL的长度= NNN值的所有PDF的快速总和显示总共7401933553字节或6.89 GiB要下载:P

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐