← 项目经历
色影无忌抢救性存档工程
在一个运营 20 年的中文摄影社区关停前,用可断点续传的 Playwright 爬虫对抗 WAF 限流,抢救式存档上千篇器材评测,为个人 RAG 知识库铺路。
做这个项目的初衷,源于一次对「数字内容生命周期」的思考。
我曾在摄影领域工作,色影无忌是我熟悉的平台。当知道它会关停时,第一反应不是可惜,而是意识到:那些二十年间沉淀下来的深度器材评测,是别处找不到的一手资料。它们即将随站点一起消失。 抢救性存档由此开始。
项目思考
为什么值得抢
摄影评测和资讯不同,它高度依赖实测数据、横评对比、历史脉络——某款镜头与同期竞品的差距、某厂商产品线的演进,这些信息密度极高,且很多没有二手转载。一旦站点关停,这些内容就从互联网上永久消失了。这是典型的「抢救性」场景:内容价值长期、稳定、难以复制。
工程难点不在抓取,而在反爬
最初以为镜像一个网站是「下载 HTML」的简单事,实际撞上了三层反爬:
- WAF 指纹校验——普通 HTTP 客户端必被拦,只有真实浏览器能过
- IP 频率限流——约 3-4 个请求就触发拦截
- 换 IP / 换指纹都绕不过——这是我用受控实验反复验证的结论
这让我重新理解了反爬的本质:它不追求「拦住所有爬虫」,而是把爬取成本提高到可持续爬取之上。对抗它的唯一办法不是技巧,而是接受其节奏——严格限速 + 强制冷却 + 长时间低强度运行。这是一种「用耐心换稳定性」的思路。
抢救性爬取的工程原则
这个项目让我沉淀了几条可复用的原则:
- 断点续传是命脉:任何时刻中断都能接着爬,绝不重爬、不漏爬。SQLite 队列 + 状态机是核心。
- 短命进程比常驻守护可靠:bash 守护脚本会卡死、崩溃难恢复;改用 crontab 每 8 分钟跑一个独立短批次,单批崩溃不影响后续,这是最抗故障的设计。
- 不依赖不可靠的调度:最初用 LLM 驱动的 cron 守护,结果一次 LLM 超时就没人管事。换系统 crontab 直接调 shell,彻底脱离 LLM 依赖。
后续拓展性
这个项目没有在「存完就结束」处停步,它是一整个内容资产管线的起点:
- 个人摄影知识库(RAG):存档的 Markdown 清洗后向量化,接入现有 rag-service,形成可检索的摄影评测知识库——「问某镜头表现」「比某几款相机」这类问题都能直接问答。
- 评测数据库:从正文结构化出「品牌、品类、年份、参测产品」维度,可做器材趋势分析、品牌横评。
- 离线档案馆:archive 目录天然是静态站点结构,可本地部署为可浏览的离线档案。
长期价值
抢救性爬取最打动我的,是它把「存储」从技术动作变成了对内容的尊重。当数字平台的记忆面临消失,能不能把它完整、稳定、可检索地保存下来,考验的不只是工程能力,更是对内容长期价值的判断力。这套「反爬对抗 + 断点续传 + 分层存储」的架构,沉淀下来就是我后续所有数据存档类项目的通用底座。
项目亮点
- 破解 WAF 频率限流的真实机制(换 IP / 换指纹均无效)
- 三层存储架构:原始 HTML + SQLite 队列 + 清洗 Markdown
- crontab 驱动 + 断点续传,苛刻的反爬下仍稳定长跑
- 抢救内容背后的长期价值判断