如果你喜欢某个网站,就备份它:网页内容归档实用指南

如果你喜欢某个网站,就备份它:网页内容归档实用指南

了解如何使用各种工具高效保存你喜爱的网页。

备份网页内容的重要性比以往任何时候都更加突出。随着无数网站的消失或政策变更,掌握如何归档喜爱的页面可以避免丢失宝贵的信息。

为什么要归档网页内容?

我们许多人都经历过这种沮丧:曾经指向精彩内容的链接现在却返回 404 错误。这可能是由域名过期、平台关闭或网站政策变更引起的。仅仅收藏页面是远远不够的;链接可能会失效,内容也可能会消失。归档可确保你喜爱的网页内容得以保存,以供日后参考。

网页内容归档工具

有多种工具可用于归档网页内容。以下是三个常用选择:

  1. monolith:该命令行工具可将网页保存为单个 HTML 文件,包含所有必需的 CSS、图像和 JavaScript。这使得无需网络连接即可轻松离线查看已归档的页面。

  2. wget:一款功能强大的命令行实用工具,可从网络下载文件。它可以镜像整个网站,非常适合备份静态站点。

  3. ArchiveBox:一款开源的自托管工具,可以多种格式归档网页内容。它可以保存整个网站、单个页面或链接集合,并提供用于搜索归档内容的用户友好界面。

选择合适的工具

在开始归档之前,明确你想要保存的内容至关重要。以下是一份快速指南:

  • 单个页面:使用 monolith 或 SingleFile 浏览器扩展将整个网页保存为独立的 HTML 文件。
  • 整个静态网站:使用 wget --mirror 下载整个站点。建议包含 WARC(Web ARChive)格式以供长期保存。
  • 具备搜索功能的长期收藏:搭建自托管的 ArchiveBox 实例,创建可搜索的网页内容归档。

如何使用 wget 镜像网站

要使用 wget镜像网站,请按以下步骤操作:

步骤 1:安装 wget

如果你尚未安装 wget ,可以轻松添加它。在 macOS 上,可以使用包管理器来安装它。

步骤 2:创建备份脚本

你可以创建一个简单的脚本来自动化备份流程。以下是一个示例脚本:

#!/usr/bin/env bash
# mirror-site.sh - backup một site tĩnh, kèm file WARC
set -euo pipefail
URL="$1"
NAME=$(echo "$URL" | sed -E 's#https?://##; s#/.*##')
DATE=$(date +%Y%m%d)
OUT="$HOME/web-archive/$NAME/$DATE"
mkdir -p "$OUT"
cd "$OUT"
wget --mirror --convert-links --adjust-extension --page-requisites --no-parent --wait=1 --random-wait --limit-rate=500k --user-agent='Mozilla/5.0 (personal-archive)' --warc-file="$NAME-$DATE" --warc-cdx "$URL"
echo "Xong: $OUT"
du -sh "$OUT"

步骤 3:运行脚本

通过传入你要归档的网站 URL 来运行脚本:

bash mirror-site.sh https://example.com

使用 monolith 归档单个页面

如果你想归档单个页面,尤其是来自带有站点地图的博客,可以使用 monolith。操作方法如下:

步骤 1:安装 monolith

请确保已安装 monolith 。你可以在其官方网站上找到安装说明。

步骤 2:创建归档脚本

以下是用于归档站点地图中列出页面的 Python 脚本:

#!/usr/bin/env python3
# archive_sitemap.py - Python 3.10+, cần: pip install requests
import hashlib
import subprocess
import sys
import time
import xml.etree.ElementTree as ET
from pathlib import Path
import requests

NS = {"sm": "http://www.sitemaps.org/schemas/sitemap/0.9"}
OUT_DIR = Path.home() / "web-archive" / "pages"

def get_urls(sitemap_url: str) -> list[str]:
    resp = requests.get(sitemap_url, timeout=30)
    resp.raise_for_status()
    root = ET.fromstring(resp.content)
    if root.tag.endswith("sitemapindex"):
        urls = []
        for loc in root.findall("sm:sitemap/sm:loc", NS):
            urls.extend(get_urls(loc.text.strip()))
        return urls
    return [loc.text.strip() for loc in root.findall("sm:url/sm:loc", NS)]

def archive(url: str) -> None:
    key = hashlib.sha1(url.encode()).hexdigest()[:12]
    target = OUT_DIR / f"{key}.html"
    if target.exists():
        print(f"[skip] {url}")
        return
    result = subprocess.run(["monolith", url, "-j", "-I", "-o", str(target)], capture_output=True, text=True, timeout=120)
    status = "ok" if result.returncode == 0 else "FAIL"
    print(f"[{status}] {url} - {target.name}")
    with open(OUT_DIR / "index.tsv", "a") as f:
        f.write(f"{key}\t{status}\t{url}\n")

if __name__ == "__main__":
    OUT_DIR.mkdir(parents=True, exist_ok=True)
    for u in get_urls(sys.argv[1]):
        archive(u)
        time.sleep(2)

步骤 3:运行脚本

要运行该脚本,请使用以下命令:

python3 archive_sitemap.py https://example.com/sitemap.xml

使用 ArchiveBox 实现自动化

对于较大的链接集合,ArchiveBox 会非常有帮助。设置方法如下:

步骤 1:安装 ArchiveBox

你可以使用 Docker 搭建 ArchiveBox。为其创建一个目录并运行:

mkdir -p ~/archivebox/data
cd ~/archivebox
curl -fsSL 'https://docker-compose.archivebox.io' -o docker-compose.yml
docker compose run archivebox init --setup
docker compose up -d

你可以添加单个链接或包含链接的文件:

docker compose run archivebox add 'https://example.com/article'
docker compose run archivebox add ~/links.txt

步骤 3:定时备份

你可以使用 cron 定时任务来自动化归档过程。例如,要在每周日凌晨 3 点运行备份:

0 3 * * 0 /home/user/bin/mirror-site.sh https://example.com/blog/ /var/log/mirror.log 2>&1

结语

归档网页内容对于防止有价值的信息消失至关重要。通过使用 wget、monolith 和 ArchiveBox 等工具,你可以有效地备份喜爱的网站,并确保它们在未来依然可访问。

优点

  • 防止因死链或域名过期导致的数据丢失。
  • 支持离线访问已归档的内容。
  • 提供可搜索的归档库,便于信息检索。

缺点

  • 配置和使用需要一定的技术知识。
  • 根据归档内容的数量,可能会占用大量存储空间。
  • 需要定期维护和检查以确保备份可用。

注意事项

本文仅供学习参考之用。在执行这些命令时,请务必将所有占位符替换为你的实际数据。在采纳任何说法之前,请务必核对其原始来源。

常见问题

  • 什么是网页归档? — 网页归档是收集和存储网络内容以保存其供将来访问的过程。
  • 我为什么要备份网站? — 备份网站可以防止因链接失效、域名过期或平台变更而导致宝贵信息丢失。
  • 我可以使用哪些工具来归档网页内容? — 常用的工具包括 wget、monolith 和 ArchiveBox。
  • 如何使用 wget 镜像网站? — 你可以使用 wget --mirror 配合各种选项来下载整个网站。
  • 什么是 WARC 格式? — WARC(Web ARChive)是一种用于存储网页及其关联元数据以便长期保存的文件格式。
  • 我可以归档 JavaScript 渲染的网站吗? — 可以,但你可能需要 SingleFile 或 ArchiveBox 等能够处理 JavaScript 的工具。
  • 我该如何自动化归档流程? — 你可以使用 cron 定时任务来为你喜爱的网站安排定期备份。
  • 什么是 3-2-1 备份原则? — 3-2-1 原则建议保留三份数据副本,分别存放在两种不同类型的介质上,其中一份存放在异地。

标签

#webdev #archiving #selfhosted #devops #backup #wget #monolith #ArchiveBox #datarecovery #webpreservation

Free field guide

Prompt-Injection Defense Checklist

The controls that actually reduce the blast radius when your app feeds untrusted text to an LLM. Enter your email — you'll get the PDF instantly, plus new posts on AI, security & Linux.