如何使用wget(使用mk选项)镜像站点及其外部链接的图像?

时间:2011-03-09 00:47:09

标签: backup wget mirror

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

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

谢谢!

3 个答案:

答案 0 :(得分:1)

@ PatrickHorn答案的略微修改版本:

首先cd进入包含下载文件的顶级目录。

“首先要递归地查找页面,尽管只是来自那个域”

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

答案 1 :(得分: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。

这里有另一个人a similar question,但是下载远程图像似乎还没有解决。

The thread here建议只需咬住子弹并执行“-r -l 1 -H”,但也可以使用-A来限制实际保存到图像或css类型的文件:

答案 2 :(得分: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 manual以获得更多参考