我需要使用 wget 从我的大学网站下载大量 pdf 文件(如果不是不可能收集和整理所有链接,那将是乏味的),链接如下:
http://example.edu/path_to_directory/directory/foobar.pdf
我正在使用以下命令:
wget -mk --no-check-certificate --load-cookies cookies.txt http://example.edu/arbitrary_link_to_directory/directory/
不幸的是,包含 pdf 的实际目录每个都重定向到一个错误页面,而我得到的只是一堆 html 和 css 文件。
http://example.edu/path_to_directory/directory/
会在浏览器中将其重定向到
http://example.edu/path_to_directory/error/error.html
是否可以使用 wget 下载所有有问题的文件?
答案1
当我想从一个不容易(或主动使其变得困难)的网站下载一堆文件时,我会生成一个文件 URL 列表,如下所示:
lynx -dump -listonly $URL | awk '/\.pdf/ {print $2}' > /tmp/pdflist.txt
然后,我通常会编辑文件以vi
删除我不想下载的条目,最后使用 wget 获取所有条目:
wget --input-file=/tmp/pdflist.txt
这对于简单的任务来说效果很好,并且通常对于中等难度的任务也足够好......但是对于涉及解析复杂的 html 和以下链接(可能使用 cookie)的困难任务,我将perl
使用该模块编写一个网络机器人libwww-perl
(又名轻量级水压)。
答案2
在您的大学网站上,有一个页面提供所有 PDF 的链接?或者你怎么知道 PDF 文件名列表?
在这种情况下,您需要编写一个名为 scraper 的脚本,以编程方式从该页面获取链接,然后自动循环该列表并使用 wget 或其他工具下载它们。我建议使用 PHP 或 Python 来编写抓取工具。您将轻松管理原始网站上的最终分页。如果使用 PHP,您可以简单地使用以下命令下载文件
file_put_contents('destination_filename', file_get_contents('source_url');