网站存档

我最近深入探讨了网站归档的主题。 朋友问我,他们担心由于系统管理不善或恶意删除而失去对Internet的控制。 此类威胁使网站归档成为任何系统管理员的重要工具。 事实证明,有些站点比其他站点难得多。 本文介绍了归档传统网站的过程,并说明了它在支持现代网络的流行单页应用程序中不起作用。

转换简单网站


用HTML手动编写网站的日子已经过去了。 现在,它们是动态的,可以使用最新的JavaScript,PHP或Python框架即时构建。 结果,站点变得更加脆弱:数据库崩溃,错误的更新或漏洞可能导致数据丢失。 在作为Web开发人员的前一生中,我不得不忍受这样的想法:客户希望网站永远存在。 这种期望与Web开发“快速行动并破坏事物”的原则不太吻合。 在这方面,使用Drupal内容管理系统被证明特别困难,因为大型更新有意破坏了与第三方模块的兼容性,这意味着客户很少能负担得起的昂贵更新过程。 解决方案是将这些站点存档:建立一个生动活泼的网站-并将其转换为任何Web服务器都可以永远提供的简单HTML文件。 此过程对于您自己的动态网站以及您无法控制并想要保护的第三方网站很有用。

简单的或静态的站点由古老的Wget处理。 尽管您需要一个真正的咒语来镜像整个站点:

$ nice wget --mirror --execute robots=off --no-verbose --convert-links \ --backup-converted --page-requisites --adjust-extension \ --base=./ --directory-prefix=./ --span-hosts \ --domains=www.example.com,example.com http://www.example.com/ 

此命令加载网页的内容,并且还爬网指定域中的所有链接。 在您喜欢的网站上开始此操作之前,请考虑爬网的可能后果。 上面的命令有意地忽略了robots.txt规则( 档案管理员现在已经习惯使用该规则),并以最大速度下载该网站。 大多数爬网程序都有在呼叫和带宽限制之间暂停的选项,以免在目标站点上造成过多的负载。

此命令还接收“页面详细信息”,即样式表(CSS),图像和脚本。 页面的加载内容会更改,因此链接指向本地副本。 生成的文件集可以托管在任何Web服务器上,它们代表原始网站的静态副本。

但这是一切顺利的时候。 任何曾经使用计算机工作的人都知道事情很少会按计划进行:有许多有趣的方法可以破坏该过程。 例如,前段时间在网站上放置带有日历的图块很流行。 CMS会即时生成它们,并将搜寻器发送到一个无休止的循环中,以尝试获取越来越多的新页面。 棘手的档案管理员可以使用正则表达式(例如Wget具有--reject-regex选项)来忽略有问题的资源。 另一个选择:如果网站管理界面可用,请禁用日历,登录表单,评论表单和其他动态区域。 一旦站点变为静态,它们将始终停止工作,因此从原始站点中删除此混乱情况是有意义的。

JavaScript噩梦


不幸的是,有些网站不仅仅是HTML。 例如,在单页站点上,Web浏览器本身通过运行一个小的JavaScript程序来创建内容。 一个简单的用户代理(例如Wget)将无法成功恢复这些站点的有意义的静态副本,因为它根本不支持JavaScript。 从理论上讲,站点应该支持渐进式改进,以便无需JavaScript即可访问内容和功能,但是很少遵循这些指令,因为使用NoScriptuMatrix之类的插件的人都会确认

传统的归档方法有时会以最愚蠢的方式失败。 当我尝试备份本地报纸时,我发现WordPress在包含的末尾添加了查询字符串(例如?ver=1.12.4 )。 在服务于存档的Web服务器上检测内容类型会造成混淆,因为它们依赖文件扩展名来生成正确的Content-Type标头。 将此类存档下载到浏览器后,它将无法加载脚本,从而破坏了动态网站。

随着浏览器逐渐成为运行任意代码的虚拟机,基于纯HTML分析的归档方法应该得到改编。 解决这些问题的方法是记录(并播放)服务器在爬网过程中传递的HTTP标头,真正的专业归档人员会使用这种方法。

创建和显示WARC文件


Internet档案中, Brewster Calais和Mike Burner在1996年开发了ARC (ARChive)格式:一种将在归档过程中创建的数百万个小文件组合在一起的方法。 最后,该格式被标准化为WARC 规范 (Web ARChive),于2009年作为ISO标准发布,并于2017年进行了修订。 由国际保护联盟 (IIPC)领导的标准化工作。 根据Wikipedia的说法,它是“图书馆和其他组织的国际组织,旨在协调未来为保护Internet内容而做出的努力”,并且包括国会图书馆和Internet档案馆等成员。 后者在其Herritrix Java搜寻器中使用WARC格式。

WARC文件在一个压缩档案中组合了多种资源,例如HTTP标头,文件内容和其他元数据。 方便地,带有--warc的Wget --warc器也支持这种格式。 不幸的是,浏览器无法直接显示WARC文件,因此需要特殊的查看器才能访问档案。 否则您必须将其转换。 我发现的最简单的查看器是pywb ,一个Python包。 它会启动一个简单的Web服务器,并带有Wayback Machine之类的界面,以查看WARC文件的内容。 以下命令集会将WARC文件映射到http://localhost:8080/

  $ pip install pywb $ wb-manager init example $ wb-manager add example crawl.warc.gz $ wayback 

顺便说一下, Webrecorder服务的开发人员创建了此工具,该工具使用浏览器保存页面的动态内容。

不幸的是,pywb无法加载Wget生成的WARC文件,因为它遵守 WARC 1.0规范 不正确要求,该要求在1.1版修复 。 在Wget或pywb解决这些问题之前,由Wget创建的WARC文件还不够可靠,因此我个人开始寻找其他替代方案。 我的注意力吸引到了以简单名称crawl命名的爬虫 。 它是这样开始的:

  $ crawl https://example.com/ 

该程序支持一些命令行参数,但是大多数默认值都具有相当的功能:它从其他域下载CSS和图像之类的资源(如果未指定-exclude-related标志),但是递归不会超出指定的主机。 缺省情况下,启动十个并发连接:使用-c标志更改此参数。 但最重要的是,生成的WARC文件可以在pywb中正常加载。

未来的工作和替代方案


有许多使用WARC文件的资源 。 特别是,有一个名为Wpull的替代Wget,专门用于存档网站。 它具有对PhantomJS的实验性支持,并与youtube-dl集成,可让您分别下载更复杂的JavaScript网站和下载流媒体。 该程序是ArchiveBot存档工具的基础,该工具ArchiveTeam的“顽皮的档案管理员,程序员,作家和演讲者的免费团队”开发,试图“将故事永久保存起来”。 似乎PhantomJS集成没有我们想要的那么好,因此ArchiveTeam使用了许多其他工具来镜像更复杂的站点。 例如, snscrape扫描社交媒体配置文件并生成要发送到ArchiveBot的页面列表。 另一个工具是crocoite ,该工具以无头模式运行Chrome来存档包含大量JavaScript的网站。

如果不提及HTTrack的“施乐站点”,本文将是不完整的。 与Wget一样,HTTrack程序创建站点的本地副本,但是不幸的是,它不支持保存到WARC。 对于不熟悉命令行的新手而言,交互式功能可能会更有趣。

同样,在研究过程中,我发现了Wget的替代品Wget2 ,它支持多线程工作,从而加快了程序的运行速度。 但是,这里缺少一些 Wget 功能 ,包括模板,保存到WARC和FTP支持,但是添加了RSS支持,DNS缓存和改进的TLS支持。

最后,我个人对此类工具的梦想是将它们与我现有的书签系统集成。 我目前将有趣的链接存储在Wallabag中Walalbag是一个用于存储有趣页面的本地存储服务,它是免费Pocket程序(现在由Mozilla拥有)的替代产品。 但是Wallabag的设计仅创建文章的“可读”版本,而不是完整副本。 在某些情况下,“可读版本”实际上是不可读的 ,并且Wallabag有时无法处理解析 。 取而代之的是,其他工具(例如书签存档器reminescence )将页面的屏幕快照与完整的HTML一起保存,但是不幸的是,它们不支持WARC格式,而WARC格式将提供更准确的播放。

我进行镜像和归档的可悲事实是数据快要消失了。 幸运的是,业余档案管理员可以使用这些工具来保存Internet上有趣的内容。 对于那些不想自己做的人,这里有一个Internet存档,以及ArchiveTeam组,该组正在努力创建Internet存档本身的备份副本

Source: https://habr.com/ru/post/zh-CN431222/


All Articles