🎧 Listen to this article: हिंदी · English · தமிழ் · తెలుగు · ಕನ್ನಡ · മലയാളം · ଓଡ଼ିଆ · 日本語 · 中文
🌍 Read this in your language: हिंदी · தமிழ் · తెలుగు · ಕನ್ನಡ · മലയാളം · ଓଡ଼ିଆ · 日本語 · 中文
备份网页内容的重要性比以往任何时候都更加突出。随着无数网站的消失或政策变更,掌握如何归档喜爱的页面可以避免丢失宝贵的信息。
为什么要归档网页内容?
我们许多人都经历过这种沮丧:曾经指向精彩内容的链接现在却返回 404 错误。这可能是由域名过期、平台关闭或网站政策变更引起的。仅仅收藏页面是远远不够的;链接可能会失效,内容也可能会消失。归档可确保你喜爱的网页内容得以保存,以供日后参考。
网页内容归档工具
有多种工具可用于归档网页内容。以下是三个常用选择:
-
monolith:该命令行工具可将网页保存为单个 HTML 文件,包含所有必需的 CSS、图像和 JavaScript。这使得无需网络连接即可轻松离线查看已归档的页面。
-
wget:一款功能强大的命令行实用工具,可从网络下载文件。它可以镜像整个网站,非常适合备份静态站点。
-
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
步骤 2:添加链接
你可以添加单个链接或包含链接的文件:
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
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.
Free. No spam — unsubscribe in one click.


Responses
Sign in to leave a response.