Douban Books — 豆瓣读书助手
抓取豆瓣公开个人主页的读书数据(已读/想读/在读),输出为 CSV 或 JSON 文件,无需登录。
支持的能力
| 能力 | 说明 | 用户示例 | |------|------|----------| | 全量抓取 | 从第一页到最后一页,完整抓取全部数据 | "同步我的豆瓣读书数据" | | 增量同步(翻页) | 逐页抓取,遇到已有书籍自动停止 | "检查豆瓣有什么新书" | | RSS 增量同步 | 通过 RSS 秒级获取最新动态,无需翻页 | "快速同步豆瓣新书" | | 查看统计 | 展示各分类数量和基本信息 | "我的豆瓣读了多少本书" | | 年度报告 | 按年份统计阅读量、月度分布、评分趋势 | "生成我的年度阅读报告" | | 导出 CSV/JSON | 生成文件,可指定路径和格式 | "导出豆瓣数据为JSON" |
根据用户意图参考对应说明文件了解抓取逻辑和工作流。
快速开始
首次使用
Step 1:提供豆瓣用户 ID(必须)
每次使用前,需要先告知 AI 你的豆瓣用户 ID。如果你的豆瓣主页是 https://book.douban.com/people/example/,那么你的用户 ID 是 example。
告诉 AI:"我的豆瓣 ID 是 XXX" 或直接给出主页链接。
Step 2:执行全量抓取
python scripts/fetch_douban.py --user <user_id> --output douban_books.csv
Step 3:等待完成
- 已读:数量因人而异,约 5-8 分钟/1000 本
- 想读:数量因人而异
- 在读:数量因人而异
完成后文件保存在指定路径。
命令参考
# 全量抓取(首次使用)
python scripts/fetch_douban.py --user <id> --mode full
# 翻页增量同步
python scripts/fetch_douban.py --user <id> --mode incremental
# RSS 轻量增量同步(推荐日常使用,秒级完成)
python scripts/fetch_douban.py --user <id> --mode rss
# 导出为 JSON 格式
python scripts/fetch_douban.py --user <id> --format json
# 从已有数据生成年度报告
python scripts/fetch_douban.py --user <id> --report
# 只抓已读书籍
python scripts/fetch_douban.py --user <id> --type collect
参数说明
| 参数 | 缩写 | 说明 | 默认值 |
|------|------|------|--------|
| --user | -u | 豆瓣用户 ID | 上次记录的 ID |
| --output | -o | 输出文件路径 | ~/douban_books.csv |
| --mode | -m | full / incremental / rss | full |
| --format | -f | csv / json | csv |
| --type | -t | collect / wish / do(可多次指定) | 全部 |
| --max-pages | | 每分类最大抓取页数(调试用) | 不限 |
| --no-delay | | 禁用随机延迟(仅测试) | 关闭 |
| --report | | 从已有数据生成年度阅读报告 | 关闭 |
工作流
全量同步
1. 确认用户 ID(如未提供,让用户确认)
2. 运行 fetch_douban.py --user <id> --output <path> --mode full
3. 逐页抓取已读/想读/在读页面
4. 解析每本书:书名、作者、译者、出版社、评分、短评、日期、标签
5. 合并写入文件
6. 报告:抓取总数、各分类数量、耗时
翻页增量同步
1. 读取已有文件
2. 逐页抓取,碰到已有 豆瓣ID 则停止该分类
3. 将新增条目追加到文件末尾
4. 报告:新增数量、各分类变化
RSS 轻量增量同步(推荐日常使用)
1. 读取已有文件
2. 请求豆瓣 RSS 源:https://www.douban.com/feed/people/{uid}/interests
3. 解析 XML,提取书籍条目
4. 按 豆瓣ID 去重,跳过已存在的书籍
5. 将新增条目追加到文件
6. 报告:新增数量
RSS 模式优势:
- 秒级完成,无需逐页翻页
- 不会触发豆瓣频率限制
- 适合每日定时自动同步
年度阅读报告
1. 读取已有数据文件
2. 按年份分组统计已读书籍
3. 展示:年度阅读量、月度分布、平均评分、评分分布、高频标签
4. 列出所有 5 星好书
维护规则
清理调试残留文件
每次更新脚本或执行抓取任务后,必须自动清理 scripts/ 目录下的调试残留文件。只应保留以下文件:
fetch_douban.py— 主脚本.douban_sync_state.json— 同步状态文件(如有)
清理规则:
- 删除所有
test_*.py、*_test.py、*_v*.py、*_retry.*、*_debug.*、analyze_*.py等调试/测试文件 - 删除所有
.js文件(skill 不使用 Node.js) - 清理后确认
scripts/目录只包含必要文件 - 此规则无需用户提醒,每次更新后自动执行
抓取范围与限制
| 分类 | 典型数量 | 预计耗时 | |------|---------|---------| | 已读 | 因人而异 | 视数量而定 | | 想读 | 因人而异 | 视数量而定 | | 在读 | 因人而异 | 视数量而定 |
- 每页 15 本,豆瓣强制 2.5-4.5 秒随机延迟(避免封禁)
- 脚本内置错误重试(最多 3 次)
- RSS 增量同步无延迟限制
- 网络中断后可重新运行(从断点继续)
数据字段说明
详见 references/csv-format.md。
解析规则说明
详见 references/parse-rules.md。
常见问题
Q: 抓取失败/被拦截怎么办? 豆瓣有频率限制,请等待几分钟后再试。脚本会自动重试 3 次。
Q: 数据不完整怎么办? 可以指定只抓取某个分类:
python scripts/fetch_douban.py --user <user_id> --type collect # 只抓已读
python scripts/fetch_douban.py --user <user_id> --type wish # 只抓想读
python scripts/fetch_douban.py --user <user_id> --type do # 只看在读
Q: 如何快速同步新增书籍? 推荐使用 RSS 模式,秒级完成:
python scripts/fetch_douban.py --user <id> --mode rss
Q: 如何导出为 JSON?
python scripts/fetch_douban.py --user <id> --format json
Q: 如何查看年度阅读报告?
python scripts/fetch_douban.py --user <id> --report
Q: 如何定时自动同步? 可以通过 WorkBuddy 自动化功能配置定时任务:
自动化名称:豆瓣读书每日同步
触发时间:每天 02:00
执行内容:python scripts/fetch_douban.py --user <id> --output <path> --mode rss
微信扫一扫