首页 » 网站建设 » 数据归档php查询技巧_对网站进行归档

数据归档php查询技巧_对网站进行归档

访客 2024-12-13 0

扫一扫用手机浏览

文章目录 [+]

编译自: https://anarc.at/blog/2018-10-04-archiving-web-sites/

作者: Anarcat

数据归档php查询技巧_对网站进行归档

译者: fuowang

数据归档php查询技巧_对网站进行归档
(图片来自网络侵删)

我最近深入研究了网站归档,由于有些朋友担心碰着糟糕的系统管理或恶意删除时失落去对放在网上的内容的掌握权。
这使得网站归档成为系统管理员工具箱中的主要工具。
事实证明,有些网站比其他网站更难归档。
本文先容了对传统网站进行归档的过程,并阐述在面对最新盛行单页面运用程序(SPA)的当代网站时,它有哪些不敷。

转换为大略网站

手动编码 HTML 网站的日子早已不复存在。
现在的网站是动态的,并利用最新的 JavaScript、PHP 或 Python 框架即时构建。
结果,这些网站更加薄弱:数据库崩溃、升级出错或者未修复的漏洞都可能使数据丢失。
在我以前是一名 Web 开拓职员时,我不得不接管客户这样的想法:希望网站基本上可以永久事情。
这种期望与 web 开拓“快速行动和破除陈规”的理念不符合。
在这方面,利用 Drupal 内容管理系统(CMS)尤其具有寻衅性,由于重大更新会毁坏与第三方模块的兼容性,这意味着客户很少承担的起高昂的升级本钱。
办理方案是将这些网站归档:以实时动态的网站为根本,将其转换为任何 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 规则,就像现在 归档者的习气做法 ,并以尽可能快的速率归档网站。
大多数抓取工具都可以选择在两次抓取间停息并限定带宽利用,以避免使网站瘫痪。

上面的命令还将获取 “页面所需(LCTT 译注:单页面所需的所有元素)”,如样式表(CSS)、图像和脚本等。
下载的页面内容将会被修正,以便链接也指向本地副本。
任何 web 做事器均可信管天生的文件集,从而天生原始网站的静态副本。

以上所述是事情统统顺利的时候。
任何利用过打算机的人都知道事情的进展很少如操持那样;各种各样的事情可以使程序以有趣的办法分开正轨。
比如,在网站上有一段韶光很盛行日历块。
内容管理系统会动态天生这些内容,这会使爬虫程序陷入去世循环以考试测验检索所有页面。
机动的归档者可以利用正则表达式(例如 Wget 有一个 --reject-regex 选项)来忽略有问题的资源。
如果可以访问网站的管理界面,另一个方法是禁用日历、登录表单、评论表单和其他动态区域。
一旦网站变成静态的,(那些动态区域)也肯定会停滞事情,因此从原始网站中移除这些凌乱的东西也不是全无意义。

JavaScript 噩梦

很不幸,有些网站不仅仅是纯 HTML 文件构建的。
比如,在单页面网站中,web 浏览器通过实行一个小的 JavaScript 程序来构建内容。
像 Wget 这样的大略用户代理将难以重修这些网站的故意义的静态副本,由于它根本不支持 JavaScript。
理论上,网站该当利用 渐进增强 技能,在不该用 JavaScript 的情形下供应内容和实现功能,但这些指引很少被人遵照 —— 利用过 NoScript 或 uMatrix 等插件的人都知道。

传统的归档方法有时会以最屈曲的办法失落败。
在考试测验为一个本地报纸网站( pamplemousse.ca )创建备份时,我创造 WordPress 在包含 的 JavaScript 末端添加了查询字符串(例如:?ver=1.12.4)。
这会使供应归档做事的 web 做事器不能精确进行内容类型检测,由于其靠文件扩展名来发送精确的 Content-Type 头部信息。
在 web 浏览器加载此类归档时,这些脚本会加载失落败,导致动态网站受损。

随着 web 向利用浏览器作为实行任意代码的虚拟机转化,依赖于纯 HTML 文件解析的归档方法也须要随之适应。
这个问题的办理方案是在抓取时记录(以及重现)做事器供应的 HTTP 头部信息,实际上专业的归档者就利用这种方法。

创建和显示 WARC 文件

在 互联网档案馆 (Internet Archive) 网站,Brewster Kahle 和 Mike Burner 在 1996 年设计了 ARC (即 “ARChive”)文件格式,以供应一种聚合其归档事情所产生的百万个小文件的方法。
该格式终极标准化为 WARC(“Web ARChive”) 规范 ,并在 2009 年作为 ISO 标准发布,2017 年修订。
标准化事情由 国际互联网保护同盟 (International Internet Preservation Consortium)(IIPC)领导,据维基百科称,这是一个“为了折衷为未来而保护互联网内容的努力而成立的国际图书馆组织和其他组织”;它的成员包括 美国国会图书馆(US Library of Congress)和互联网档案馆等。
后者在其基于 Java 的 Heritrix crawler (LCTT 译注:一种爬虫程序)内部利用了 WARC 格式。

WARC 在单个压缩文件中聚合了多种资源,像 HTTP 头部信息、文件内容,以及其他元数据。
方便的是,Wget 实际上供应了 --warc 参数来支持 WARC 格式。
不幸的是,web 浏览器不能直接显示 WARC 文件,所以为了访问归档文件,一个查看器或某些格式转换是很有必要的。
我所创造的最大略的查看器是 pywb ,它以 Python 包的形式运行一个大略的 web 做事器供应一个像“ 光阴倒流机网站(Wayback Machine)”的界面,来浏览 WARC 文件的内容。
实行以下命令将会在 http://localhost:8080/ 地址显示 WARC 文件的内容:

$ pip install pywb

$ wb-manager init example

$ wb-manager add example crawl.warc.gz

$ wayback

顺便说一句,这个工具是由 Webrecorder 做事供应者建立的,Webrecoder 做事可以利用 web 浏览器保存动态页面的内容。

很不幸,pywb 无法加载 Wget 天生的 WARC 文件,由于它 遵照 的 1.0 规范不一致 , 1.1 规范修复了此问题 。
就算 Wget 或 pywb 修复了这些问题,Wget 天生的 WARC 文件对我的利用来说不足可靠,以是我找了其他的替代品。
引起我把稳的爬虫程序简称 crawl 。
以下是它的调用办法:

$ crawl https://example.com/

(它的 README 文件说“非常大略”。
)该程序支持一些命令行参数选项,但大多数默认值都是最佳的:它会从其他域获取页面所需(除非利用 -exclude-related 参数),但肯定不会递归出域。
默认情形下,它会与远程站点建立十个并发连接,这个值可以利用 -c 参数变动。
但是,最主要的是,天生的 WARC 文件可以利用 pywb 完美加载。

未来的事情和替代方案

这里还有更多有关利用 WARC 文件的 资源 。
特殊要提的是,这里有一个专门用来归档网站的 Wget 的直接替代品,叫做 Wpull 。
它实验性地支持了 PhantomJS 和 youtube-dl 的集成,即许可分别下载更繁芜的 JavaScript 页面以及流媒体。
该程序是一个叫做 ArchiveBot 的繁芜归档工具的根本,ArchiveBot 被那些在 ArchiveTeam 的“零散离群的归档者、程序员、作家以及演说家”利用,他们致力于“在历史永久丢失之前保存它们”。
集成 PhantomJS 彷佛并没有如团队期望的那样良好事情,以是 ArchiveTeam 也用其它零散的工具来镜像保存更繁芜的网站。
例如, snscrape 将抓取一个社交媒体配置文件以天生要发送到 ArchiveBot 的页面列表。
该团队利用的另一个工具是 crocoite ,它利用无头模式的 Chrome 浏览器来归档 JavaScript 较多的网站。

如果没有提到称做“网站复制者”的 HTTrack 项目,那么这篇文章算不上完全。
它事情办法和 Wget 相似,HTTrack 可以对远程站点创建一个本地的副本,但是不幸的是它不支持输出 WRAC 文件。
对付不熟习命令行的小白用户来说,它在人机交互方面显得更有代价。

同样,在我的研究中,我创造了叫做 Wget2 的 Wget 的完备重制版本,它支持多线程操作,这可能使它比前身更快。
和 Wget 比较,它 舍弃了一些功能 ,但是最值得把稳的是谢绝模式、WARC 输出以及 FTP 支持,并增加了 RSS、DNS 缓存以及改进的 TLS 支持。

末了,我个人对这些工具的愿景是将它们与我现有的书签系统集成起来。
目前我在 Wallabag 中保留了一些有趣的链接,这是一种自托管式的“稍后阅读”做事,意在成为 Pocket (现在由 Mozilla 拥有)的免费替代品。
但是 Wallabag 在设计上只保留了文章的“可读”副本,而不是一个完全的拷贝。
在某些情形下,“可读版本”实际上 不可读 ,并且 Wallabag 有时 无法解析文章 。
正好相反,像 bookmark-archiver 或 reminiscence 这样其他的工具会保存页面的屏幕截图以及完全的 HTML 文件,但遗憾的是,它没有 WRAC 文件以是没有办法更可信的重现网页内容。

我所经历的有关镜像保存和归档的悲剧便是去世数据。
幸运的是,业余的归档者可以利用工具将有趣的内容保存到网上。
对付那些不想麻烦的人来说,“互联网档案馆”看起来仍旧在那里,并且 ArchiveTeam 显然 正在为互联网档案馆本身做备份 。

via: https://anarc.at/blog/2018-10-04-archiving-web-sites/

作者: Anarcat 选题: lujun9972 译者: fuowang 校正: wxy

本文由 LCTT 原创编译, Linux中国 名誉推出

点击“理解更多”可访问文内链接
标签:

相关文章

php统计邮件技巧_PHP Mail 函数

mail( 函数许可您从脚本中直接发送电子邮件。需求要使邮件函数可用,PHP 须要已安装且正在运行的邮件系统。要利用的程序是由...

网站建设 2024-12-14 阅读0 评论0

phpcase分号技巧_从新进修php之根本二

从本日开始就正式重新学习php了,先从根本的开始哇现在开拓基本便是用框架,thinkphp这个框架,也把php根本的给忘完了。1....

网站建设 2024-12-14 阅读0 评论0