![让 wget 下载不同域名上的页面资源](https://linux22.com/image/1706855/%E8%AE%A9%20wget%20%E4%B8%8B%E8%BD%BD%E4%B8%8D%E5%90%8C%E5%9F%9F%E5%90%8D%E4%B8%8A%E7%9A%84%E9%A1%B5%E9%9D%A2%E8%B5%84%E6%BA%90.png)
当网站资源位于另一个域(域 B)时,如何使用 wget 下载整个网站(域 A)?
我试过:wget -r --level=inf -p -k -E --domains=domainA,domainB http://www.domainA
答案1
wget --recursive --level=inf --page-requisites --convert-links --html-extension \
--span-hosts=domainA,domainB url-on-domainA
更新:我记得上面的命令在过去对我有用(那是在 2010 年,我当时使用适用于 Windows 的 GNU 工具 );然而,当我最近再次尝试使用它时,我必须对其进行如下修改:
wget --recursive --level=inf --page-requisites --convert-links \
--adjust-extension --span-hosts --domains=domainA,domainB domainA
它的简写版本为:wget -rEDpkH -l inf domainA,domainB domainA
使用的旗帜的细目
-r
=--recursive
-l <depth>
=--level=<depth>
(最大递归深度。0
或inf
平均无限递归)-E
=--adjust-extension
(为已转换为 HTML 或 CSS 的文件添加适当的扩展名)-p
=--page-requisites
(下载显示页面所需的所有文件(例如图片、样式表))-K
= (转换前--backup-converted
保存原始文件(扩展名)的备份).orig
-k
=--convert-links
(转换链接以使其适合本地查看)-H
=--span-hosts
(跨度至任意主机;允许从不同于原始 URL 的主机下载)-D <domain-list>
=--domains=<domain-list>
(限制跨越指定域)-np
=--no-parent
(不访问与当前目录不在同一目录下的链接)-U <agent-string>
=--user-agent=<agent-string>
参考
答案2
wget --recursive --level=inf --page-requisites --convert-links --html-extension -rH -DdomainA,domainB domainA
答案3
wget --page-requisites --convert-links --adjust-extension --span-hosts --domains domainA,domainB domainA
您可能需要忽略 robots.txt(请注意,这可能违反某些服务条款,您应该下载最低要求)。请参阅https://www.gnu.org/software/wget/manual/wget.html#Robot-Exclusion。
答案4
考虑使用HT轨道。它在抓取其他域上的内容时比 wget 有更多选项。使用 wget 和 --span-hosts、--domains 和 --accept 不足以满足我的需求,但 HTTrack 却能胜任。我记得设置其他域上的重定向限制很有帮助。