我知道 wget -mkp http://example.com可以镜像站点及其所有内部链接文件。
但是,我需要备份一个站点,其中所有图像都存储在一个单独的域中。我如何使用 wget 下载这些图像,并相应地更新 src 标签?
谢谢!
我知道 wget -mkp http://example.com可以镜像站点及其所有内部链接文件。
但是,我需要备份一个站点,其中所有图像都存储在一个单独的域中。我如何使用 wget 下载这些图像,并相应地更新 src 标签?
谢谢!
@PatrickHorn 答案的略微修改版本:
首先cd
进入包含下载文件的顶级目录。
“第一个 wget 递归查找页面,尽管仅来自那个域”
wget --recursive --timestamping -l inf --no-remove-listing --page-requisites http://site.com
“第二个 wget 跨越主机但不递归检索页面”
find site.com -name '*.htm*' -exec wget --no-clobber --span-hosts --timestamping --page-requisites http://{} \;
我已经尝试过了,它似乎大部分都有效 - 我只从我所追求的网站获取所有 .htm(l) 页面,然后是外部文件。我还不能将链接更改为相对于外部文件的本地副本。
带有 -r 和 -H 的 wget 非常危险,因为它可以轻松进入大型站点(可能通过广告或搜索框)并跨越整个 Internet。下载单个页面的所有依赖项的技巧是您不一定需要递归,但您确实希望下载页面先决条件并允许 wget 跨越主机,如下所示:
wget -H -N -kp http://<site>/<document>
但是,使用此命令,现在您不会获得递归行为。
因此,要将两者结合起来,我们可以使用第一个 wget 递归地查找页面,尽管仅来自那个域;第二个 wget 跨越主机但不递归检索页面:
wget -mkp http://example.com
find example.com/ -name '*.html*' -exec wget -nc -HNkp http://{} \;
-nc 很重要——它告诉 wget 就像从服务器下载它一样,但使用磁盘上的本地副本,这意味着应该已经转换了引用。接下来,它将获取所有资源;最后它应该破坏原始文件(需要查询字符串),并正确命名第二个文件。请注意,这个双重下载文件以便它可以修复 - 但是,我卡住的地方是 -k,将它没有下载的相对 URL 转换回绝对 URL。所以在第二步之后,所有的链接现在又是远程 url。
幸运的是,这个问题应该更容易手动解决,因为所有绝对链接都应该以“ http://example.com/ ”开头,因此可以运行一个简单的“sed”脚本来修复链接参考。
如果您知道您希望 example.com 包含的域,我的建议是使用 -D 选项仅指定您希望从中下载的域,而不是其他任何域。例如,从 google.com,您也包括 gstatic.com。
这里有另一个人有类似的问题,但下载远程图像似乎还没有解决。
这里的线程建议只是硬着头皮做“-r -l 1 -H”,但也使用 -A 来限制实际保存为图像或 css 类型的文件:
假设您知道存储图像的单独域,那么事情比您使用最近的 wget 构建(即版本 >= 1.20)要简单得多。例如,假设将图像托管在http://www.images.domain
,试试这个:
wget -mkp -E -np -H -Dexample.com,images.domain http://example.com
在上面的示例中,我在开始的-mkp
更多参数中添加了一些 [-E (--adjust-extension)
和-np (--no-parent)
] 只是因为我认为它们使用起来很方便,再加上您绝对需要的以下参数:
-H (--span-hosts) => enables spanning across hosts when doing recursive retrieving
-D<comma separated domain list> (--domain-list=<comma separated domain list>) => used to set the domains to be followed for file retrieving
就是这样,请查看wget 手册以供进一步参考