Back to skills
extension
Category: Data & AnalyticsNo API key required

豆瓣读书(无需登录)

豆瓣读书助手 — 抓取个人已读/想读/在读列表,输出CSV/JSON,支持全量同步、增量更新与RSS轻量同步

personAuthor: user_79b4210bhubcommunity

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