使用 wget 从自重定向目录下载任意数量的文件

使用 wget 从自重定向目录下载任意数量的文件

我需要使用 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');

相关内容