不幸的是,没有一个答案能够解决从存档网站制作完整镜像的问题(每个文件都不会重复数十次)。因此,我共同尝试了另一种方法。hacked是一个重要的词,因为我的解决方案既不是通用解决方案,也不是非常简单的解决方案(请参阅:复制并粘贴)。我使用Privoxy代理服务器在与wget镜像时即时重写了文件。
但是首先,从Wayback Machine进行镜像有何困难?
问题1 +解决方案
Wayback工具栏便于交互使用,但可能会干扰wget。因此,使用privoxy过滤器规则摆脱它
FILTER: removewaybacktoolbar remove Wayback toolbar
s|BEGIN WAYBACK TOOLBAR INSERT.*END WAYBACK TOOLBAR INSERT|Wayback Toolbar removed|s
问题2 +解决方案
我想捕获整个站点,因此需要一个不太小的递归深度。但是我不想wget对整个服务器进行爬网。通常,您为此目的使用wget 的no-parent选项-np
。但这在这里不起作用,因为您想获得
http://web.archive.org/web/ 20110722080716 /http://cst-www.nrl.navy.mil/lattice/struk/hcp.html
但是也
http://web.archive.org/web/ 20110801041529 /http://cst-www.nrl.navy.mil/lattice/struk/a_f.html
(请注意路径中更改的时间戳记)。省略-np
将使wget爬行到(...)http://cst-www.nrl.navy.mil
,最后检索整个navi.mil
网站。我绝对不想要那个!因此,此筛选器尝试模拟-np
Wayback机器的行为:
FILTER: blocknonparentpages emulate wget -np option
s|/web/([0-9].*)/http://cst-www.nrl.navy.mil/lattice/|THIS_IS_A_GOOD_$1_ADDRESS|gU
s|/web/(.*)/http(.*)([" ])|http://some.local.server/404$3|gU
s|THIS_IS_A_GOOD_(.*)_ADDRESS|/web/$1/http://cst-www.nrl.navy.mil/lattice/|gU
我将其保留为深入探讨语法的练习。什么此过滤器是这样的:它代替所有韦巴克网址喜欢http://web.archive.org/web/20110801041529/http://www.nrl.navy.mil/
用http://some.local.server/404
,只要它们不含有http://cst-www.nrl.navy.mil/lattice/
。
你必须调整http://some.local.server/404
。这是向wget发送404错误。可能privoxy可以做到这一点更优雅。但是,对我而言,最简单的方法是将链接重写为本地http服务器上不存在的页面,因此我坚持使用此方法。
并且,您还需要调整两种情况的出现http://cst-www.nrl.navy.mil/lattice/
以反映您要镜像的站点。
问题3 +解决方案
最后,页面的某些存档版本可能会链接到另一个快照中的页面。还有另一种。依此类推...最终您将获得同一页面的许多快照-wget在获取所有快照之前将永远无法完成。我真的不想要,也不想要!Wayback机器非常聪明,在这里很有帮助。您可以请求文件
http://web.archive.org/web/ 20110801041529 /http://cst-www.nrl.navy.mil/lattice/struk/a_f.html
即使它不包含在20110801041529
快照中。它会自动将您重定向到正确的位置:
http://web.archive.org/web/ 20110731225728 /http://cst-www.nrl.navy.mil/lattice/struk/a_f.html
因此,另一个privoxy过滤器将所有快照重写为最新的快照
FILTER: rewritewaybackstamp rewrite Wayback snapshot date
s|/([0-9]{14})(.{0,3})/|/20120713212803$2/|g
实际上,其中包含的每个14位数字/.../
都将替换为20120713212803
(将其调整为所需站点的最新快照)。如果站点结构中存在并非源自Wayback机器的编号,则可能会出现问题。并不完美,但对于Strukturtypen网站而言还不错。
这样做的好处是,wget忽略了它重定向到的新位置,并将文件(在上面的示例中)保存为web.archive.org/web/20110801041529/http://cst-www.nrl.navy.mil/lattice/struk/a_f.html
。
使用wget镜像存档的站点
因此,最后user.filter
在user.action
via 中启用了这些privoxy过滤器(在中定义)
{ +filter{removewaybacktoolbar} +filter{blocknonparentpages} +filter{rewritewaybackstamp} }
web.archive.org
您可以照常使用wget。不要忘记告诉wget使用代理:
export http_proxy="localhost:8118"
wget -r -p -k -e robots=off http://web.archive.org/web/20120713212803/http://cst-www.nrl.navy.mil/lattice/index.html
我使用了这些选项,但也-m
应该可以使用。您将获得文件夹
20120713212803
20120713212803cs_
20120713212803im_
20120713212803js_
当Wayback机器分离图像(im_
),样式表(cs_
)等时,我将所有内容合并在一起,并使用了sed魔术来相应地替换丑陋的相对链接(../../../../20120713212803js_/http:/cst-www.nrl.navy.mil/lattice
)。但这不是真的必要。
20110722080716
快照下访问,因此wget的-np
选项将无济于事。