如何指示 wget 递归抓取网站并仅下载某些类型的图像?
我尝试使用它来爬取网站并仅下载 Jpeg 图像:
wget --no-parent --wait=10 --limit-rate=100K --recursive --accept=jpg,jpeg --no-directories http://somedomain/images/page1.html
但是,尽管 page1.html 包含数百个指向子页面的链接,而这些子页面本身又直接链接到图像,wget 还是会报告“删除 subpage13.html,因为它应该被拒绝”之类的内容,而且从不下载任何图像,因为没有图像与起始页直接链接。
我假设这是因为我的 --accept 被用于指导抓取和过滤要下载的内容,而我希望它仅用于指导内容的下载。我怎样才能让 wget 抓取所有链接,但只下载具有某些扩展名(如 *.jpeg)的文件?
编辑:此外,有些页面是动态的,是通过 CGI 脚本生成的(例如 img.cgi?fo9s0f989wefw90e)。即使我将 cgi 添加到我的接受列表中(例如 --accept=jpg,jpeg,html,cgi),这些页面仍然会被拒绝。有办法解决这个问题吗?
答案1
为什么你不尝试使用wget -A jpg,jpeg -r http://example.com
?
答案2
如果不允许下载 subpage13.html(以及它链接到的 jpg),您如何期望 wget 知道它的内容。我建议您允许 html,获取您想要的内容,然后删除您不想要的内容。
我不太清楚为什么你的 cgi 被拒绝了...wget 有没有错误输出?也许可以设置 wget verbose ( -v
) 看看。最好单独提出一个问题。
也就是说,如果您不关心带宽并且下载大量文件,那么删除之后不需要的内容就没关系了。
另请查看--html-extension
从手册页中:
-E
--html 扩展
如果下载了 application/xhtml+xml 或 text/html 类型的文件,并且 URL 不以正则表达式 .[Hh][Tt][Mm][Ll]? 结尾,则此选项将导致将后缀 .html 附加到本地文件名。例如,当您镜像使用 .asp 页面的远程站点,但希望镜像页面可在您的现有 Apache 服务器上查看时,这很有用。另一个很好的用途是当您下载 CGI 生成的材料时。类似这样的 URLhttp://site.com/article.cgi?25将被保存为article.cgi?25.html。
请注意,每次您重新镜像站点时,都会重新下载以这种方式更改的文件名,因为 Wget 无法判断本地 X.html 文件对应于远程 URL X(因为它还不知道 URL 产生的输出类型是 text/html 还是 application/xhtml+xml)。为了防止重新下载,您必须使用 -k 和 -K,以便将文件的原始版本保存为 X.orig。
--restrict-file-names=unix
也可能由于这些 cgi url 而有用......
答案3
您也可以使用 MetaProducts Offline Explorer,无需编程
答案4
尝试添加--page-requisites
选项