Star 历史趋势
数据来源: GitHub API · 生成自 Stargazers.cn
README.md

douban-backup

Python 3.10+ License: MIT uv

命令行备份你的豆瓣账号 —— 电影 / 音乐 / 图书 / 游戏 / 剧集(想看 · 在看 · 看过),

一个 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 + dbcl2uv 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 扩展,本项目参考了其抓取接口与导出结构设计。

License

MIT

关于 About

命令行备份豆瓣账号的书影音游剧标记(想看/在看/看过),导出为与「豆伴」结构一致的 Excel。
backupclidoubandouban-backupexcelpython

语言 Languages

Python100.0%

提交活跃度 Commit Activity

代码提交热力图
过去 52 周的开发活跃度
1
Total Commits
峰值: 1次/周
Less
More

核心贡献者 Contributors