对抗 link rot

标签: link rot | 发表时间:2021-10-21 22:50 | 作者:wzyboy
出处:https://wzyboy.im/

随着建站变得越来越容易,网页消失似乎也变得更频繁。作为个人,我们有什么办法可以拯救这些失效的超链接?

一、消失的网页

几年前我曾经写过一篇有关 link rot 的文章,提到互联网上的各种「永久链接」并没有那么「永久」。许多个人博客,随着博客平台的倒闭而迁移了几次,里面的内容变得七零八落,最终可能所有文字都 随风而逝了。一些较为火爆的内容可能还有不少内容农场会转载,或是 Wayback Machine 帮忙存档,但是一些 较为小众的话题,可能就永久地佚失了。

对于互联网上的简体中文内容来说,除了因为技术原因而消失,还要面临两大额外的挑战:

  • 相当一部分简中内容产生自中国大陆网民,发布于中国大陆的网站上,受 中国政府言论审查制度的监管,极易被网站管理方删除;
  • 许多内容生产者选择在以〇信公众号为首的封闭平台发布内容,而这些封闭平台的大部分内容只能在 app 内查看,即使有网页版本也有重重限制(登录后可见、禁止爬虫、禁止外链等)。

前一段时间,我较沉迷 某中国游戏公司开发的游戏,较多地访问 某大型中文游戏论坛,愈发深切地感受到 link rot 是多么令人恼火和惋惜。上一秒刚打开的页面,读了一半暂时离开一段时间,回来随手将页面一刷新或点击「下一页」,就变成了一行「帖子已被隐藏」。有时我会在该游戏的 英文社区看到一些转载自中文社区的帖子,但是随着原链点过去却发现原网页也莫名其妙地消失了。

我越来越想对抗 link rot 了。

二、消失的服务

当年 Google Reader 还在的时候,我会值得细读的文章转发至自己的邮箱,大概是我最早用过的 read-it-later 类型的服务了。后来我用过几种不同的 RSS 阅读器,也用过 Instapaper、Pocket (Read It Later) 等不同的保存文章的服务。诚然,这些服务能在一定程度上对抗 link rot,让你有地方能找回自己曾经读过但现已消失的文章;但其实除了 Google Reader 那样将全文发送到自己邮箱里,其他服务本质上只是把内容消失的风险从一家转移到另一家而已。Instapaper 诞生后好多年,用户百万,但 全公司只有一个人;Pocket 现在有 Mozilla 这座靠山,但大公司也不能保证把某个服务长久地运营下去。

这几年我越来越 不信任「云」了。用户把数据存在某个服务里,一旦这个服务开始劣化甚至倒闭,用户只能像难民一样试图迁移到另一个服务,但原始的服务不一定提供数据导出,就算导出了,也不一定能顺利地导入到新服务里。我可以接受的「云」的用法是:

  • 将数据保存成开放、通用、易解析的格式;
  • 将这些数据遵循 3-2-1 原则, 备份到「云」上。

我希望我对抗 link rot 保存下来的内容也能符合这样的规则,不要锁死某一家服务,而是处于一个「 这家倒闭了我立刻可以轻易地迁移到别家」的状态。 No vendor lock-in. No strings attached.

三、保存网页的方法

Wayback Machine 是世界上最大的网页存档服务之一,它的历史几乎和互联网一样久,按说已经 too big to fail 了,但我还是对它不够信任。我曾经想过要是能自己搭一个类似的存档服务就好了。我几个月前搭了个 ArchiveBox 用了一段时间,但很快发现它最大的局限性:无法保存需要用户登录之后才能访问到的页面。于是我发现我的思路有问题:我不应该找存档、管理、展示一体的服务,而是先把内容保存下来,再想办法管理和展示它们。

我的浏览器里一直装着一个叫 SingleFile 的扩展,可以将渲染后的页面存成单个 HTML 文件,用 Base64 内嵌所有的外部资源,使这个 HTML 文件在断网的情况下也能 100% 还原页面被保存时的样子。SingleFile 生成的文件是单个 HTML,且即使是像 TweetDeck、Google Docs、Figma 这种非常复杂的页面也能保存并在离线状态下原样打开。我装了这个扩展之后主要用来整活,代替截图,临时保存一些不容易再现的页面(比如有次 Redis 官网挂了,出现了 Redis 错误,十分喜感,我就 保存下来了),也许我可以用它来存档网页?

那么还缺少一个管理这些保存下来的 HTML 文件的方法。

四、管理离线网页的方法・其一

我首先想到的是像 macOS Finder 那样用标签来管理文件。我找到一个叫 TagSpaces 的项目,算是一个文件管理与笔记结合在一起的软件,但它与流行的类似软件(OneNote、Notion、Evernote)设计思路不太一样。我粗略使用了一下,理念还是很不错的:

  • 无集中数据库,用户可以选择把标签等信息直接塞到文件名里(如 foo.html 会变成 foo[tag1].html),或是存到 sidecar JSON 里;
  • 无账号系统,也不需要设置一个专门的目录用来存储内容,而是任意打开一个目录就可以开始查看和管理里面的文件;
  • 软件操作的是文件本身,并不关心你的文件存在哪里,因此你可以用 Dropbox / Syncthing 之类的方案自己做多设备同步,也可以选择直接把文件存到 S3 之类的对象存储上,在各设备上访问。

TagSpaces 从设计理念上避免了 vendor lock-in,用户只是用 TagSpaces 来管理内容,而不是把内容绑死在 TagSpaces 上。TagSpaces 倒闭了,用户的内容依然在用户手里。

TagSpaces 还提供了一个 浏览器扩展,用 readability 解析页面之后将其保存成结构较为简单的 HTML,但我更喜欢 SingleFile 这样将页面完整保存下来。

TagSpaces 虽然是开源软件,但官方免费提供的二进制包只有最基础的功能,如果要完整功能的话,需要付费购买 PRO 版本的二进制包,或者自己编译。

五、管理离线网页的方法・其二

Uucky 聊到 TagSpaces 的时候,她问我「你最需要的付费功能是什么?」,我说是全文搜索。她说这不是 Windows 和 macOS 自带的功能吗?我如梦初醒——既然这些离线网页本身只是 HTML 文件,而不是什么专有格式,那我直接对着它们搜索不就行了?为啥一定要在 TagSpaces 里搜索?

我调查了一下,找到一款 Linux 可用的全文搜索方案 Recoll。Recoll 以成熟强大的 Xapian 引擎作为后端,以 Qt 作为前端,也能跨平台运行(但 Windows 和 macOS 用户直接用系统自带的搜索就行,不需要 Recoll)。

Recoll 默认会索引整个家目录,我将其改为只索引离线网页所在的目录,再配置一下 实时索引服务,其他的配置都按照默认的来就挺好。

仔细想想,Gmail 有标签功能,但我其实很少通过标签来找邮件。我真的需要 TagSpaces 来手动 tagging 文件吗?有全文检索的话,我直接搜索关键词不就行了?于是我选择了 Recoll 而不是 TagSpaces。

六、尾声

我对抗 link rot 的方案就这么拼拼凑凑地完成了:

  • SingleFile 保存网页到本地;
  • Recoll 实时索引这些文件,提供全文搜索;
  • BorgBackup 把文件备份到 home server 及异地存储。

如果想要在多台设备上访问的话,还可以考虑用 recoll-webui 提供网页搜索接口。

如果是在手机上遇到想保存的文章但是电脑不在身边怎么办?目前似乎没有像 SingleFile 那样能在手机浏览器中保存 DOM 的方案,那只能通过外部访问保存未登录的页面了。上文提到的 ArchiveBox 内建的多种存档方式里有一种就是 headless Chromium + SingleFile,可以在手机上将链接提交给 ArchiveBox 存档,然后再将 ArchiveBox 生成的 SingleFile 文件加到 Recoll 监视的目录。

本文地址: https://wzyboy.im/post/1437.html 。转载请注明出处。


读者来信

2021-10-21 读者 AI 推荐了类似 Evernote 但是支持自建服务器的笔记软件 Joplin,和快速提交 URL 到 Wayback Machine 等网页存档服务的 Telegram Bot @wabarc_bot

這方案比我的要更UNIX一些…… 我筆記、webclipper、全文搜索三合一,之前是evernote,現在joplin,自建服務端可以定期導出數據庫備份,有多功能webclipper,簡化版帶圖和基礎樣式,圖多時占用空間比singlefile小不少
手機上鏈接會發給電報wabarc_bot,主要是防夾,沒法保存登錄狀態的DOM

— AI October 22, 2021

2021-10-21 读者一阁推荐了在 Chrome 中打印网页为 PDF 并保存至 Google Drive,让 Google Drive 来索引 PDF 中的文字的思路。这一方法可用于在手机上保存已登录的页面。

我选择Google Chrome打印网页到PDF直接保存到Google Drive,索引可以依赖Google Drive

— 一阁 (@yegle) October 22, 2021

相关 [link rot] 推荐:

对抗 link rot

- - wzyboy’s blog
随着建站变得越来越容易,网页消失似乎也变得更频繁. 作为个人,我们有什么办法可以拯救这些失效的超链接. 几年前我曾经写过一篇有关 link rot 的文章,提到互联网上的各种「永久链接」并没有那么「永久」. 许多个人博客,随着博客平台的倒闭而迁移了几次,里面的内容变得七零八落,最终可能所有文字都 随风而逝了.

D-link推出具电力线网络的WiFi基地台

- mgo - Engadget 中国版
D-link这款型号为 "DHP-1320" ,比较特别的地方 "当然它不会Don't Link" 为它同时具有有线(Ethernet)、无线(IEEE 802.11 b/g/n)与电力线网络(HomePlug AV)的连接能力,因为具有多种联机能力,在网络上的建构上是可以多出一些弹性. DHP-1320价格为美金129.99元(人民币约855元),虽然不是热门产品,但这样类型的产品,在架设网络时,你会想到它的,现在你去市场上去买,应该是叫电力猫.

Tag Heuer Link 尊贵 Android 手机动手玩

- Yiding - Engadget 中国版
很多人说 iPhone 是手机中的精品,甚至是「生活态度」,但相比起这一部手机,iPhone 在精品二字上就远远不及 -- 人家可是用上精钢、牛皮等种种高级物料来制作(更高档的款式更有钻石和鳄鱼皮等),绝对比 iPhone 高级;论态度,此机身价绝对超过我们编辑部每一个人的工资,最多甚至是超过十倍.

D-Link DWM-351 将门铃变成 3G 对讲机? (5 回應)

- Alan - Engadget 中国版
简单来说,只要有人按门铃,DWM-351 就会「call out」到你的手机上,和你的手机进行「视讯对话」,只是虽然声音是双向的,影像却只有从门铃到手机的单向,以免被你家的访客看到你在做奇怪的事情 (?). 你也可以在 PC 上看这些影像,但说真的:为了让门铃可以传影像,还要特别为它办一个 3G 门号,这不合理吧 @@.

TP-Link TL-WR700N:免設定、隨身、便宜超值的小AP

- 同道|贾怀军 - T客邦
出去玩經常碰到只提供有線網路的旅館,想要讓手機跟筆電同時上網相當麻煩. 最近意外發現相當超值的 TP-Link TL-WR700N,能讓手機、iPad、筆電同時連上網,而且價位也不高,網拍約500元就能買回家. WR700N外型與蘋果的AirPort Express十分相似,但是體積更小,只有約手掌大小.

诺基亚N9同步工具 Nokia Link 正式发布

- 洞箫 - cnBeta.COM
现在诺基亚N9专用同步工具Nokia Link套件已正式发布,用户可以从诺基亚官方网站下载该软件. 诺基亚N9使用的是新同步工具Nokia Link套件,兼容Windows和Mac系统,主要的功能是同步数据和传输文件. 通过该软件可以在电脑和诺基亚N9之间轻松传输音乐、照片、视频等文 件,也可以拷贝手机上的内容到电脑上的应用程序如Windows Media Player和iTunes中.

D-Link推出WiFi Baby家用监控摄像头

- - cnBeta全文版
D-Link(友讯)今天宣布推出一款面向家里有婴儿的父母用户——使用现代科技监视婴儿的一举一动. 年轻父母当然都希望每时每刻都关注着出生没多久或者已经非常好动的宝宝在做什么,尤其是对于一些逐渐已经有自己意志力的孩子而言,父母始终将之放置在侧也并不合适. 于是这款D-Link WiFi Baby Camera监控摄像头就问世了.

D-link路由器CSRF漏洞利用详解

- - 牛X阿德马
本文的目的是展示CSRF漏洞的危害,以D-link的DIR-600路由器(硬件版本:BX,固件版本:2.16)的CSRF漏洞为例. D-link的CSRF漏洞已经是公开的,本文将详细描述一下整个D-link CSRF漏洞的利用,如何通过CSRF漏洞实现远程管理访问D-link路由器. 如果某些request请求中没有csrf  token或不需要密码授权,会存在CSRF漏洞,该漏洞允许攻击者伪造登录用户发送请求,因此可以导致用户执行攻击者想要的操作请求.

TP-LINK普联TL-WR710N 150M迷你型无线路由器,105元预定

- f41c0n - 什么值得买
TP-LINK不仅“国产化”了Airport Express,而且正在以家族的形式将其发扬光大. 在推出了WR700N(内置电源、无USB、LAN*1)、WR703N(USB供电、USB*1可支持3G、LAN*1)、WR702N(USB供电、无USB、LAN*1)、WR800N(WR700N的300Mbps版)之后,又推出了这款WR710N(内置电源、USB*1、LAN*2).

HTML5的页面资源预加载技术(Link prefetch)加速页面加载

- - HTML5资源教程
不管是浏览器的开发者还是普通web应用的开发者,他们都在做一个共同的努力:让Web浏览有更快的速度感觉. 有很多已知的技术都可以让你的网站速度变得更快:使用CSS sprites,使用图片优化工具,使用.htaccess设置页面头信息和缓存时间,JavaScript压缩,使用CDN等. 我曾经介绍过本站上使用的一些速度优化技术.