3

我知道 wget -mkp http://example.com可以镜像站点及其所有内部链接文件。

但是,我需要备份一个站点,其中所有图像都存储在一个单独的域中。我如何使用 wget 下载这些图像,并相应地更新 src 标签?

谢谢!

4

3 回答 3

1

@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) 页面,然后是外部文件。我还不能将链接更改为相对于外部文件的本地副本。

于 2011-11-09T10:33:31.203 回答
0

带有 -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 类型的文件:

于 2011-03-09T03:01:38.907 回答
0

假设您知道存储图像的单独域,那么事情比您使用最近的 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 手册以供进一步参考

于 2020-01-18T14:39:25.567 回答