知乎收藏夹是我用得最狠的功能,也是最容易出事的地方:收藏的时候爽,三个月后再也找不到。
平台不给导出,收藏夹里的文章随时可能被作者删除,链接会 404。所以我这两年一直在做一件事:把它变成自己的资产。
最近把整条链路跑通了,简单说就是三步:
知乎收藏夹 ──导出──> 本地 Markdown ──AI 整理──> 知识图谱 ──git push──> GitHub (随时会消失) (Obsidian 直接能看) (关系被显式化) (有历史、可回滚)一、找导出工具:知乎没有官方出口
知乎至今没有给用户任何官方导出接口。收藏夹只是渲染出来给你看的页面数据,所以工具只能走两条路:
| 路线 | 做法 | 优点 | 痛点 |
|---|---|---|---|
| 抓 HTML | 请求文章页,用 CSS 选择器抠正文 | 实现简单 | 选择器一改就全废;知乎反爬会 403 |
| 走 API | 直接打 /api/v4/... 这类内部接口 | 快、结构化、字段干净 | 需要 Cookie,容易被风控 |
我用的这个项目把两条路都做了兜底 —— Export-Zhihu-Collections(JasonJarvan/Zhihu-Collections-MCP)。它后来干脆把整套能力包成了一个 MCP Server,这一点后面会用到。
它的关键设计:
- 输出结构是给 Obsidian 看的
downloads/├── 编程/ ← 一个收藏夹一个目录│ ├── xxx.md ← 一篇一个文件│ └── assets/│ ├── 20240101120000.jpg ← 图片本地化,不再依赖知乎 CDN│ └── ...├── logs/└── debug/ ← 解析失败的页面 HTML 存这里,方便复盘图片必须本地化。这不是洁癖:知乎的图片 URL 带鉴权参数且会过期,你把 md 存到本地,半年后打开是一堆裂图,等于没存。
- 私密收藏夹靠 Cookie
[ {"name": "z_c0", "value": "你的值"}]存成 cookies.json 放项目根目录。这个文件等同于你的知乎登录态,别提交到公开仓库。
- 403 自动降级
HTML 被拦了,自动改走 API;专栏文章走流式下载(几万字带图的长文一次性拉容易断),再加 3 次重试。
- 去重
跑第二遍不会重复下载。它会检查目标文件是否已存在。
安装与运行
git clone https://github.com/JasonJarvan/Zhihu-Collections-MCPcd Zhihu-Collections-MCPpip install -r requirements.txt
# 先让脚本自动扫出你的所有收藏夹,写回 config.jsonpython fetch_collections.py
# 编辑 config.json:确认收藏夹列表 + 输出路径python main.pyWindows 路径两种写法都认:
{ "outputPath": "D:\\Documents\\ZhihuExports" }{ "outputPath": "D:/Documents/ZhihuExports" }跑完的体感
几百篇下来,真正”抓不到”的只有两类:已删除和需要登录才能看的盐选。剩下 95% 以上都干净落盘了。剩下那些会在 debug/ 里留下现场 HTML,你 F12 一比就知道是 404 还是权限问题。
二、光有 Markdown 不够
导出完成那一刻会有一种错觉:搞定了。
其实没有。你得到的是一千个孤立的文件,而不是知识。它们之间没有任何关系,你收藏过的”什么是 Raft 协议”和”Paxos 论文精读”之间可能存在很强的关联,但 Markdown 不会告诉你。
Obsidian 的图谱视图为什么让人上瘾,就是因为它把这些隐式关系画出来了。但它需要你先手动插链接 —— 一千篇手动插?不可能。
所以第二步是:让 AI 读一遍,生成关系。
我把这个导出工具以 MCP Server 的形式挂给了 Hermes:
{ "mcpServers": { "zhihu-collections": { "command": "python", "args": ["mcp_server.py"], "cwd": "你的项目路径" } }}暴露出来四个工具:
| 工具 | 作用 |
|---|---|
list_collections | 列出所有收藏夹 |
get_collection_info | 收藏夹基本信息(文章数等) |
search_collections | 按关键词搜收藏夹 |
export_collection | 导出指定收藏夹为 Markdown |
这一步的意义在于:Agent 拿到的不再是”一堆待处理的文件”,而是”一个能按需调用的知识源”。它可以边读边决定下一批导出哪几个收藏夹。
导出完之后,让 Hermes 扫全量 Markdown,产出三样东西:
- 主题聚类 —— 把零散文章归到有限几个主题下
- 实体与关系 —— 抽概念、建
[[Obsidian 双链]] - 一张入口笔记 —— 每个主题一个 hub 笔记,链到具体文章
产出的知识图谱长这样(结构示意):
┌─────────────┐ │ 分布式共识 │ ← hub 笔记 └──────┬──────┘ ┌─────────────┼─────────────┐ ▼ ▼ ▼ ┌────────┐ ┌──────────┐ ┌────────┐ │ Raft │◄─►│ Paxos │◄─►│ 线性一致│ └────┬───┘ └──────────┘ └────┬───┘ │ │ ▼ ▼ ┌──────────┐ ┌────────────┐ │ 领导选举 │─────────────►│ CAP 定理 │ └──────────┘ └────────────┘这里有个反直觉的点,值得单独说:
AI 生成的知识图谱质量,取决于它读到的是不是全文。
如果导出的是摘要或者列表页文本,图谱就是”标题聚类”,毫无价值。正是因为工具把正文完整落地了,Agent 才能读懂内容、发现文章之间真正的语义关联。
三、推上 GitHub:给知识加时间维度
最后一步是很多人会跳过的,也是我认为最值钱的一步。
cd ZhihuExportsgit initgit add .git commit -m "sync: 2026-10-08 知乎收藏快照"GitHub 在这里承担三件事:
1. 版本化 = 知识快照的时间轴
每条 commit 是一次快照。你能精确回答”我什么时候读过 Raft 那篇论文""三个月前我到底收藏了什么”。知乎只会告诉你”你收藏了 800 条”,没有时间维度。
2. 可回滚
知乎文章被作者删了,但你本地有。导出工具某次改坏了格式,重新 clone 一下就回来了。
3. 二次加工的入口
知识图谱是可再生的,但原始 Markdown 不是。有了 GitHub 仓库,我随时可以换一个 Agent、换一套 schema 重新生成图谱,而不用重新抓一遍知乎 —— 知乎的反爬策略是会变的,下次可能就抓不动了。
仓库结构建议
my-zhihu-library/├── exports/ # 原始导出,尽量不动│ └── 2026-10-08/ # 按快照日期分目录├── graph/ # AI 产出的知识图谱│ ├── 分布式共识.md│ └── index.md├── README.md└── .gitignore └── cookies.json # 关键把原始数据和加工结果分开,是让图谱能被反复重做的前提。
几个安全上的注意点
WARNING导出的 Markdown 里通常带作者名、原文链接,部分还有你自己加的批注。如果仓库设为 Public,等于把个人知识库和阅读偏好公开了。我的做法是设成 Private。
TIP
cookies.json一定要写进.gitignore。一次git add .手滑,它就变成永久历史了 —— 删文件是不够的,要git filter-repo或者干脆重建仓库。
四、这套流程其实可以复用
抽象一下,这套东西跟”知乎”没有任何关系:
任意内容源 → 结构化落地 → LLM 抽取关系 → 版本化仓库- 内容源换成 Notion 导出、微信读书书签、YouTube 播放列表、Pocket
- 结构化落地换成任意导出脚本
- 后两步一模一样
真正决定产出质量的是第一步落下来的东西够不够完整。抓取的时候多花点心思,别让清洗的活儿留给后面的 AI。
小结
- 知乎没有官方导出,工具必须自己解决 HTML / API 双通道 + Cookie + 图片本地化 + 断点续传 这四件事
- MCP Server 的意义是让 AI 按需调用知识源,而不是一次性喂一堆文件
- 图谱的价值来自全文,不是标题 —— 抓取质量决定图谱质量
- 推 GitHub 不只是备份,是给知识库装上时间轴,并保留重新加工的自由
收藏的价值不在于存,在于还能被再次找到。而”再次找到”这件事,本质上就是给散落的碎片补上关系。