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

问题描述 投票:3回答:3

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

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

谢谢!

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


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


0
投票

假设您知道存储图像的单独域,那么事情要比使用最新的wget构建(即版本> = 1.20)所期望的要简单得多。例如,假设图像托管在http://www.images.domain,请尝试以下操作:

© www.soinside.com 2019 - 2024. All rights reserved.