douban-backup
命令行备份你的豆瓣账号 —— 电影 / 音乐 / 图书 / 游戏 / 剧集(想看 · 在看 · 看过),
一个 Python 单文件脚本,uv run 直跑、零配置。备份结果存入 SQLite,并可导出为与
Chrome 扩展「豆伴」结构完全一致的 Excel 工作簿。
本项目受「豆伴 / 豆坟」(tofu) 项目启发,用 Python 独立重写了其「书影音游剧」标记的 核心抓取与导出逻辑。代码为全新实现,未包含原项目的任何源码。
特性
- 🎬 五类标记全覆盖:电影 / 音乐 / 图书 / 游戏 / 剧集,× 想看 · 在看 · 看过
- 🔐 自动读取浏览器 cookie(Chrome / Edge / Brave / Firefox / Safari),也可手动提供
- 📊 Excel 导出与原插件逐字一致:14 个 sheet、9 列固定表头、按 id 倒序
- 🔄 增量备份:仅当状态 / 短评 / 评分 / 标签变化时更新,旧版本归档为历史
- ⏱️ 内置限速 + 500 容错:避免被豆瓣限流,单页失败自动退化为逐条抓取
- 🗄️ SQLite 持久化:可反复运行、断点续备
快速开始
需要先安装 uv(macOS:brew install uv),并在浏览器登录 douban.com。
uv run douban_backup.py
uv 会自动安装全部依赖,抓取完成后生成 douban_interests.xlsx,原始数据存于 douban_backup.db。
不想用 uv?也可以
pip install requests beautifulsoup4 lxml browser_cookie3 openpyxl后直接python douban_backup.py。
Cookie 来源(三选一)
| 方式 | 命令 |
|---|---|
| 自动读浏览器(默认) | uv run douban_backup.py |
| 指定浏览器 | uv run douban_backup.py --browser chrome |
| 手动 cookie 串 | uv run douban_backup.py --cookie 'ck=xxx; dbcl2="123:abc"; bid=yyy' |
| 仅 ck + dbcl2 | uv run douban_backup.py --ck xxx --dbcl2 '"123:abc"' |
手动方式获取 cookie:浏览器打开 douban.com → F12 → Network → 点任意请求 → 复制请求头里的 Cookie 整串。
macOS 首次读取 Chrome cookie 时,系统会弹钥匙串授权框,点「始终允许」即可。
命令行参数
--user USER 备份指定用户的数字 ID(默认当前登录账号)
--db DB SQLite 数据库路径(默认 douban_backup.db)
-o, --output PATH 导出路径,.xlsx 或 .csv(默认 douban_interests.xlsx)
--interval SEC 请求间隔秒数(默认 1.0)
--no-export 只备份到数据库,不导出文件
--export-only 仅从已有数据库导出,不抓取
--browser NAME 读取 cookie 的浏览器:chrome/edge/brave/opera/chromium/firefox/safari
--cookie STRING 手动提供完整 cookie 字符串
--ck / --dbcl2 手动提供单个关键 cookie
-v, --verbose 输出调试日志
示例
# 仅从已备份的数据库重新导出 uv run douban_backup.py --export-only -o 我的标记.xlsx # 备份他人(需对方数字 ID) uv run douban_backup.py --user 12345678 # 只备份、不导出 uv run douban_backup.py --no-export # 放慢请求避免被限流 uv run douban_backup.py --interval 2
导出格式
与原插件「豆伴」的 Excel 导出完全一致:
- 一个工作簿 14 个 sheet,按
类型/状态拆分并中文命名:- 电影
看过 / 在看 / 想看 - 音乐
听过 / 在听 / 想听 - 图书
读过 / 在读 / 想读 - 游戏
玩过 / 在玩 / 想玩 - 剧集
看过的舞台剧 / 想看的舞台剧(剧集无「在看」) - 每个 sheet 内按标记 id 倒序。
- 电影
- 每个 sheet 9 列固定表头:
标题 / 简介 / 豆瓣评分 / 链接 / 创建时间 / 我的评分 / 标签 / 评论 / 可见性
| 列 | 数据来源 |
|---|---|
| 标题 | subject.title |
| 简介 | subject.card_subtitle |
| 豆瓣评分 | subject.rating.value(保留 1 位小数);无评分时为 subject.null_rating_reason |
| 链接 | subject.url |
| 创建时间 | create_time |
| 我的评分 | rating.value(未评分为空) |
| 标签 | tags(逗号分隔) |
| 评论 | comment |
| 可见性 | is_private ? private : public |
指定
.csv或未安装 openpyxl 时,降级为「每个有数据的 sheet 导出一个 CSV 文件」。
增量备份
每次运行以时间戳为版本号。仅当某条目的 状态 / 短评 / 评分 / 标签 发生变化时才更新,
旧版本会以版本号为键存入 history 字段;完全相同的重复标记不会产生冗余历史。可放心反复运行。
注意事项
- 默认请求间隔 1 秒;如遇 429 / 封禁请调大
--interval。 - cookie 会过期,失效时提示「未登录」,重新获取即可。
- 备份的标记时间线取决于豆瓣接口返回;已删除的条目无法恢复。
- 仅用于备份你自己的或你有权访问的公开数据,请遵守豆瓣的使用条款。
致谢
- doufen-org/tofu(豆伴 / 豆坟)—— 原始的豆瓣备份 Chrome 扩展,本项目参考了其抓取接口与导出结构设计。