递归wget与热链接的必备条件
我经常使用wget来镜像非常大的网站。 包含热链接内容的网站(无论是图片,视频,CSS,JS)带来了问题,因为我似乎无法指定我希望wget抓取其他主机上的页面必备条件,而不需要抓取超链接到其他主机主机。
例如,让我们看看这个页面https://dl.dropbox.com/u/11471672/wget-all-the-things.html
让我们假装这是一个我想完全反映的大型网站,包括所有页面必备条件 - 包括那些被链接的页面。
wget -e robots=off -r -l inf -pk
除了热链接的图像之外,^^会获得一切
wget -e robots=off -r -l inf -pk -H
^^可以获取所有内容,包括热链接的图像,但是会疯狂地失去控制,继续下载整个网络
wget -e robots=off -r -l inf -pk -H --ignore-tags=a
^^获取第一页,包括热链接和本地图像,不遵循链接超出范围之外的网站的超链接,但显然也不遵循超链接到网站的下一页。
我知道有各种其他工具和方法来实现这一点(HTTrack和Heritrix允许用户区分其他主机上的热链接内容与其他主机的超链接之间的区别),但我想看看这是否可以用wget 。 理想情况下,这不会在后期处理中完成,因为我希望将外部内容,请求和标头包含在我输出的WARC文件中。
您不能指定跨页主机的页面请求只; -H是全部或没有。 由于-r和-H将拉低整个Internet,因此您需要分割使用它们的爬网。 要抓取热链接的页面请求,您必须运行两次wget:一次缓存整个网站的结构,一次抓取热链接的请求。 我有幸用这种方法:
1) wget -r -l inf [other non-H non-p switches] http://www.example.com
2)建立网站结构中所有HTML文件的列表( find . | grep html
)和管道到文件
3) wget -pH [other non-r switches] -i [infile]
第1步在本地机器上构建网站结构,并为其提供任何HTML页面。 第2步为您提供了页面列表,第3步显示了这些页面上使用的所有资产。 这将在您的本地计算机上构建一个完整的镜像,只要热链接的资产仍处于活动状态。
我设法通过使用正则表达式来做到这一点。 像这样来镜像http://www.example.com/docs
wget --mirror --convert-links --adjust-extension
--page-requisites --span-hosts
--accept-regex '^http://www.example.com/docs|.(js|css|png|jpeg|jpg|svg)$'
http://www.example.com/docs
您可能不得不调整每个特定站点的正则表达式。 例如一些网站喜欢使用CSS文件的参数(例如style.css?key=value
),这个例子将排除这个参数。
您希望从其他主机中包含的文件至少可能包含这些文件
png jpg jpeg gif
ttf otf woff woff2 eot
js css svg
任何人都知道其他人吗?
所以你想要的实际正则表达式可能看起来更像这样(作为一个没有换行符的字符串):
^http://www.example.org/docs|.([Jj][Ss]|[Cc][Ss][Ss]|[Pp][Nn][Gg]|[Jj]
[Pp][Ee]?[Gg]|[Ss][Vv][Gg]|[Gg][Ii][Ff]|[Tt][Tt][Ff]|[Oo][Tt][Ff]|[Ww]
[Oo][Ff][Ff]2?|[Ee][Oo][Tt])(?.*)?$
链接地址: http://www.djcxy.com/p/57157.html