使用wget或httrack镜像已归档网站时遇到问题


12

我正在尝试使用wget创建网站的本地镜像。但是我发现我没有得到所有的链接页面。

这是网站

http://web.archive.org/web/20110722080716/http://cst-www.nrl.navy.mil/lattice/

我不想所有的开头的页面web.archive.org,但我确实希望所有的开头的页面http://web.archive.org/web/20110722080716/http://cst-www.nrl.navy.mil/lattice/

当我使用时wget -r,在文件结构中我发现

web.archive.org/web/20110722080716/http://cst-www.nrl.navy.mil/lattice/index.html,

但我没有该数据库中的所有文件,例如

web.archive.org/web/20110808041151/http://cst-www.nrl.navy.mil/lattice/struk/d0c.html.

也许httrack会做得更好,但是现在这太抢手了。

因此,通过哪种方法可以从Internet Archive Wayback Machine上获取已存档网站的本地副本


男子!我试图镜像完全相同的页面(当原始站点仍然在线时,我很生气,因为我没有显示它,这真是很生气)。我认为问题在于,并非所有文件都可以在20110722080716快照下访问,因此wget的-np选项将无济于事。
mpy 2014年

您是否手动检查了丢失的页面是否已实际存档?Archive.org并不总是存档每个页面。
nitro2k01

Answers:


20

尽管有帮助,但先前的回答无法简洁,可靠且可重复地解决根本问题。在这篇文章中,我们简要地详细介绍了每个方面的困难,然后提供了一个httrack基于适度的解决方案。

背景

但是,在进行此操作之前,请考虑仔细阅读mpy的书面答复。在令人遗憾地被忽略的帖子中,mpy严格记录了Wayback Machine的晦涩(和老实混淆)的归档方案。

毫不奇怪,它并不漂亮。Wayback Machine不会将站点明智地归档到单个目录中,而是暂时将单个站点分布在两个或多个数字标识的同级目录中。要说,这会使镜像复杂化,这是一种轻描淡写的说法。

了解此方案带来的可怕陷阱是了解现有解决方案不足的核心。让我们继续吧,对吧?

先前的解决方案1:wget

在这方面,相关的StackOverflow问题“从waybackmachine恢复旧网站”可能是这方面最严重的违规行为,建议wget使用Wayback镜像。自然,该建议从根本上是不正确的。

在没有复杂的外部URL重写的情况下(例如Privoxy),wget不能用于可靠地镜像Wayback存档的站点。作为“问题2 +解决方案”下的mpy详细信息,您选择的任何镜像工具都必须允许您仅以非过渡方式下载属于目标站点的URL。默认情况下,大多数镜像工具会过渡性地下载属于目标站点和从该站点链接的站点的所有 URL,在最坏的情况下,这意味着“整个Internet”。

有一个具体的例子。在镜像示例域时kearescue.com,您的镜像工具必须

  • 包括所有匹配的URL https://web.archive.org/web/*/http://kearescue.com。这些是目标网站(例如https://web.archive.org/web/20140521010450js_/http_/kearescue.com/media/system/js/core.js)提供的资产。
  • 排除所有其他URL。这些是其他站点提供的资产,这些站点仅与目标站点(例如https://web.archive.org/web/20140517180436js_/https_/connect.facebook.net/en_US/all.js)链接。

如果不排除此类URL,通常会提取网站存档时存档的所有或大部分Internet,特别是对于嵌入外部托管资产(例如YouTube视频)的网站。

那将是不好的。尽管wget 确实提供了一个命令行--exclude-directories选项,该选项接受一个或多个与要排除的URL匹配的模式,但它们不是通用的正则表达式;它们是简单的*语法,语法匹配零个或多个字符(不包括)/。由于要排除的URL任意包含许多/字符,wget 因此不能用于排除这些URL,因此不能用于镜像Wayback存档的站点。期。不幸故事的结尾。

至少从2009年起,此问题就已公开记录。尚未解决。下一个!

先前解决方案2:剪贴簿

Prinz推荐ScrapBook使用Firefox插件。Firefox插件。

那可能就是您所需要知道的。虽然ScrapBookFilter by String...功能确实解决了前面提到的“问题2 +解决方案”,但没有解决后续的“问题3 +解决方案”,即多余的重复问题。

能否ScrapBook充分解决前一个问题还值得怀疑。正如mpy所承认的:

尽管Scrapbook到目前为止未能完全占领该网站...

不可靠且过于简单的解决方案是非解决方案。下一个!

先前的解决方案3:wget + Privoxy

然后mpy提供了一个强大的解决方案,同时利用wgetPrivoxy。虽然wget 相当简单的配置,Privoxy是什么,但合理的。还是简单。

由于正确安装,配置和使用强大的技术障碍Privoxy,我们尚未确认mpy的解决方案。它应该以可扩展,健壮的方式工作。考虑到进入的障碍,该解决方案可能比大型网站管理员尝试恢复中小型站点的方式更适合大规模自动化。

wget+ Privoxy值得一看?绝对。但是,更简单,更容易应用的解决方案可能会为大多数超级用户提供更好的服务。

新解决方案:httrack

输入httrack,这是一个命令行工具,实现wget的镜像功能的超集。httrack支持基于模式的URL排除简化的网站重组。前者解决了mpy的“问题2 +解决方案”;后者是“问题3 +解决方案”。

在下面的抽象示例中,替换为:

  • ${wayback_url}通过顶级目录的URL归档整个目标网站(例如'https://web.archive.org/web/20140517175612/http://kearescue.com')。
  • ${domain_name}${wayback_url}排除前缀http://(例如'kearescue.com')中存在的相同域名。

开始了。安装httrack,打开一个终端窗口,cd进入您要下载站点的本地目录,然后运行以下命令:

httrack\
    ${wayback_url}\
    '-*'\
    '+*/${domain_name}/*'\
    -N1005\
    --advanced-progressinfo\
    --can-go-up-and-down\
    --display\
    --keep-alive\
    --mirror\
    --robots=0\
    --user-agent='Mozilla/5.0 (X11;U; Linux i686; en-GB; rv:1.9.1) Gecko/20090624 Ubuntu/9.04 (jaunty) Firefox/3.5'\
    --verbose

完成后,对于从该URL镜像的每种文件类型,当前目录应包含一个子目录。通常至少包括:

  • css,包含所有镜像的CSS样式表。
  • html,包含所有镜像的HTML页面。
  • js,包含所有镜像的JavaScript。
  • ico,其中包含一个镜像图标。

由于httrack内部会重写所有下载的内容以反映此结构,因此您的网站现在应该可以浏览,无需进行任何修改。如果您过早停止了上述命令,并希望继续下载,请将该--continue选项附加到完全相同的命令上,然后重试。

而已。无需外部扭曲,易于出错的URL重写或基于规则的代理服务器。

享受,其他超级用户。


我很高兴听到至少有人彻底阅读了我的答案。感谢您的进一步分析和httrack解决方案。+1
mpy

1
httrack解决方案非常完美,非常感谢!
ChrisChinchilla 2015年

伙计们,很高兴能得到一点帮助。鉴于这种挂毯悲哀和欺骗如何肠wrenchingly可怕的是解开,我只是不得不分享我的发现。
塞西尔·库里

要删除速率传输限制,请添加以下参数:--disable-security-limits --max-rate = 0
Oswaldo

7

不幸的是,没有一个答案能够解决从存档网站制作完整镜像的问题(每个文件都不会重复数十次)。因此,我共同尝试了另一种方法。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网站。我绝对不想要那个!因此,此筛选器尝试模拟-npWayback机器的行为:

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.filteruser.actionvia 中启用了这些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)。但这不是真的必要。


1
这是一个宝贵的答案。您对Wayback Machine内部站点结构的精确剖析是我最终偶然发现的基于httrack的解决方案的关键。你摇滚,mpy。
Cecil Curry

5

get

--page-requisites
此选项使Wget下载正确显示给定HTML页面所需的所有文件。这包括内联图像,声音和引用的样式表。

通常,当下载单个HTML页面时,可能不会正确显示它可能需要的任何必需文档。将-r与-l一起使用会有所帮助,但是由于Wget通常不区分外部文档和内联文档,因此通常会留下缺少其必要条件的“叶子文档”。

例如,假设文档1.html包含引用1.gif的“”标签和指向外部文档2.html的“”标签。假设2.html相似,但其图像为2.gif,并且链接到3.html。说这继续上升到任意高的数字。

-m
--mirror

打开适合镜像的选项。此选项打开递归和时间戳记,设置无限递归深度并保留FTP目录列表。当前等效于-r -N -l inf --no-remove-listing。

请注意,Wget的行为就像已指定-r一样,但是仅下载该单个页面及其必备条件。该页面到外部文档的链接将不被关注。实际上,要下载一个页面及其所有必要条件(即使它们存在于单独的网站上),并确保全部内容在本地正确显示,除-p外,该作者还喜欢使用一些其他选项:

wget -E -H -k -K -p http://<site>/<document>

SO wget -E -H -k -K -p http://web.archive.org/web/20110722080716/http://cst-www.nrl.navy.mil/lattice 将是您的最佳选择。但我推荐另一种工具,firefox扩展scrapbook

剪贴簿

ScrapBook是Firefox扩展,可帮助您保存网页并轻松管理馆藏。主要功能包括轻巧,速度,准确性和多语言支持。主要功能包括:
*保存网页
*保存网页摘要
*保存网站
*以与书签相同的方式组织集合
*全文搜索和集合的快速过滤搜索
*编辑收集的网页
*文本/ HTML编辑类似于Opera注释的功能

如何镜像站点
安装剪贴簿 并重新启动firefox

  1. 在浏览器中加载页面[要镜像的网页]
  2. 右键单击页面->将页面另存为...
  3. 深度保存中选择级别 ,然后按保存 在此处输入图片说明
  4. 过滤器中选择Restrict to Drirectory/Domain
    在此处输入图片说明

等待它完成镜像。镜像后,您可以从ScrapBook菜单脱机访问该网站。


尽管到目前为止,Scrapbook未能完全夺取该网站,但与其他建议相比,它更接近可能的解决方案。特别是它的“ 按字符串过滤...”选项比按主机/域过滤更有用。因此,我向您授予赏金:)
mpy 2014年

0

请注意以下命令,因为它会占用很多空间。“ l”后的1表示它获取网站上深1级的链接的所有页面。如果您希望它更深一些,请将其更改为2,但它可能永远不会结束,因为它可能会陷入循环中。

wget -rHpkl 1 -e robots=off http://www.example.com/

我不确定您要保留网站的哪些部分以及您不在乎哪些部分,但是您可能应该将网站的不同部分列入白名单和/或黑名单,以仅获取所需内容并阻止自己下载所有archive.org或互联网。

用于-D www.examle.com,www.another.example.com仅将所需的域列入白名单,或用于--exclude-domains www.examle.com,www.another.example.com 将不需要的领域列入黑名单。


谢谢,但是白名单/黑名单的问题在于所有存档的网站都来自web.archive.org主机。我想wget -np镜像一旦原始站点仍然在线时将镜像的所有内容。-l也无济于事,因为必须将其增加到3或4,从而导致网站层次结构过多提升。
mpy 2014年

0

Internet存档的URL格式包括网站存档的日期和时间。为了节省空间,未更改的资产被链接回站点的先前版本。

例如,在此URL http://web.archive.org/web/20000229123340/http://www.yahoo.com/中,对该站点进行爬网的日期是2000年2月29日12:33 40秒。

因此,要获得所有人的帮助http://web.archive.org/web/20110722080716/http://cst-www.nrl.navy.mil/lattice/,首先要从那里获取所有链接的资产http://web.archive.org/web/*/http://cst-www.nrl.navy.mil/lattice/


确实如此,这就是问题所在。假设页面A链接到B。因此,当前版本A链接到旧版本B。但是B也包含到A的链接。因此,A的旧版本也被检索,并再次链接到旧版本。这((需要)4的爬网深度)会导致结果,您最终得到数十个版本的索引页,但不是所有必需的文件。
mpy 2014年

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.