GetQzonehistory:QQ空间历史说说全量备份与Excel导出完整指南
【免费下载链接】GetQzonehistory获取QQ空间发布的历史说说项目地址: https://gitcode.com/GitHub_Trending/ge/GetQzonehistory
十年前的说说,为什么需要一份档案副本
你翻手机相册,突然意识到:2015 年发的那条说说、底下朋友留的评论、那年夏天拍的照片,全都还悬在云端。平台一改版、账号一有状况,你手里只剩几张对不上号的截图。GetQzonehistory 就是干这件事的开源工具——把 QQ 空间历史说说完整备份下来:手机扫一次码,可见的说说、评论、图片全部落到本地硬盘,直接产出能搜索的 Excel 和双击就能翻的网页版。
它替你把几件烦心事一次性解决了:
- 手动翻页是对耐心的考验:网页版一次只露几条,翻回 2014 年要点几千次"上一页"。这个工具直接走接口批量取数,先把总量算出来再一口气取完。
- 图片链接是会过期的:网页上的图隔段时间就失效,说说一被删,连字带图全没。工具取文字的同时把图片下载进本地
pic/目录,服务端删了原始文件,你的硬盘里还有一份。 - 截图堆是一堆查不了的东西:上百张截图想找"去年夏天那条",只能一张张看。导出的 Excel 拆成时间、内容、图片链接、评论四列,敲个关键词就能定位。
- 中途断掉不用从头再来:断网或者你手动掐掉进程,它都会先把已经取回的数据写盘再退出。
- 不用反复扫码:第一次登录成功后 cookie 缓存到本地,下次启动列出账号列表,输个序号直接接着用。
原理拆解:登录、算量、抓取三连招
整个项目就是一条流水线:扫码登录 → 估算总量 → 两路取数 → 分类落盘,具体模块见 README.MD,目录不长:
GetQzonehistory/ ├── main.py # 主入口:登录→抓取→落盘 ├── fetch_all_message.py # 第二入口:说说导出 Markdown ├── requirements.txt # 依赖清单 └── util/ ├── LoginUtil.py # 扫码登录、cookie 缓存 ├── RequestUtil.py # 消息列表请求、二分估算总量 ├── GetAllMomentsUtil.py # 说说分页(每页30条) └── ToolsUtil.py # HTML 解析、表情还原、网页模板第一招:扫码登录,相当于领一张档案室的"借阅证"。向登录接口要一张一次性二维码,用黑白字符块画在终端里,屏幕就是取件窗口;程序每 3 秒问一次状态,直到读到"登录成功"。这张证有有效期,过期了删掉缓存文件重扫,没过期下次输序号直接进门。cookie 明文放在resource/user/,约等于把借阅证搁在接待台上,别把这个目录扔进网盘同步。
第二招:消息总量是"翻到中间看看"估出来的,像估一本书有多少页。服务端不直接报消息列表的总条数,程序就从 0 到一千万的中间位置发一次请求:有数据说明量比这大,没有说明比这小,区间一轮轮收窄,二十几轮锁定总量:
total = (lower_bound + upper_bound) // 2 if "li" in response.text: lower_bound = total + 1 # 有内容,总量往大了找 else: upper_bound = total - 1 # 没内容,总量往小了找第三招:两路数据像档案员"抽卷宗"一样慢慢取。第一路是消息列表,一次取 10 条、间隔 3 秒,整体节奏和一个人慢慢刷页面差不多,不容易触发风控;第二路是说说分页接口,一页 30 条,把你没删的可见说说全取回来(含 2014 年之前的老内容)。两路取完后按作者归属去重合并:你发的进"说说",你转的进"转发",你评论别人说说的进"留言",其余的归"其他"。图片顺手也复制一份,存进pic/。
安装与首次运行:三步跑通
① 取代码、建虚拟环境、装依赖,一个命令块全搞定(虚拟环境不污染系统 Python):
git clone https://gitcode.com/GitHub_Trending/ge/GetQzonehistory cd GetQzonehistory python3 -m venv myenv && source myenv/bin/activate # Windows 用 myenv\Scripts\activate pip install -i https://mirrors.aliyun.com/pypi/simple/ -r requirements.txt⚠️ 上面命令带了阿里云镜像源,国内网络快;能直连官方源可以去掉 -i 参数。
② 装系统级 zbar 库,解码二维码要用,缺了它第一步就报错:
sudo dnf install -y zbar # Ubuntu/Debian 用 sudo apt install -y zbar;macOS 用 brew install zbar③ 跑起来,终端先打出二维码字符块,手机 QQ 扫码确认,之后自动开始抓取:
python main.py跑之前可以用一条自检命令确认环境和依赖都齐了:python -c "import requests, pandas, qrcode, pyzbar, bs4, openpyxl; print('依赖OK')"
导出产物长什么样
所有产物都落在resource/result/{QQ号}/(程序自动建目录),temp、user、result 三个路径统一由配置文件控制,逻辑见 ConfigUtil.py:
| 文件 | 内容 |
|---|---|
{QQ号}_全部列表.xlsx | 消息列表全量:时间/内容/图片链接/评论 |
{QQ号}_说说列表.xlsx | 只留你自己发的说说,已去重 |
{QQ号}_转发列表.xlsx | 你转发的内容 |
{QQ号}_留言列表.xlsx | 你留给别人说说的评论 |
{QQ号}_其他列表.xlsx | 其他好友涉及你的动态 |
{QQ号}_好友列表.xlsx | 列表里出现过的好友:昵称、QQ号、空间主页 |
pic/ | 全部图片的本地副本 |
{QQ号}_说说网页版.html | 仿空间样式的本地网页,双击翻阅,点图自动换高清 |
因为是"消息列表 + 可见说说"两路数据合并,导出里既有你自己发的,也有别人关于你的记录。收尾时终端还会打印一句统计:共几条、最早一条发于哪天、好友几个、图片几张。
踩坑速查表:最常见的五种报错
| 现象 | 大概率原因 | 一条命令解决 |
|---|---|---|
| 启动报"无法找到 zbar 共享库" | 系统库没装 | sudo dnf install -y zbar(按系统换 apt/brew) |
| 终端只有乱码看不到二维码 | 字体不支持 ASCII 字符块 | 直接打开resource/temp/QR.png扫图片 |
登录失败:请重新登录 | 缓存 cookie 过期 | 删掉resource/user/里对应账号文件,再跑python main.py |
| 长时间停在"获取消息列表数量" | 二分每轮都要发请求 | 耐心等;太久就 Ctrl+C 退出(数据已保存)再跑python main.py |
pic/里少了几张图 | 个别图片请求失败 | 重跑python main.py,cookie 还在不用重扫 |
⚠️ 本工具仅供学习和技术研究,别拿数据做商业用途,也尊重平台规则与别人的隐私。
跑通之后:两个进阶玩法
把档案变成纯文本,塞进 Obsidian。跑第二个入口python fetch_all_message.py,会在resource/fetch-all/下生成所有可见说说.md,图片同步下载并用本地路径引用,评论和转发保留为引用块,直接当博客素材用。
多账号轮换备份。resource/user/会攒下多个账号的 cookie,启动时列出"已登录用户列表",输序号复用;输0就重新扫码切到另一个号。结果按 QQ 号分目录存放,互不覆盖。
再往后就是自由发挥了:用 pandas 读一下_说说列表.xlsx,按年份统计自己哪年话最多、哪个季节拍的照片最密集——这份备份才算真正"用起来"。
一次 QQ 空间说说备份的成本,就是一次扫码加一次等待。文字、图片、评论分列存放,可检索、可筛选、可二次加工;Excel 负责分析,网页版负责翻阅,机器和人各取所需,数据从头到尾只躺在自己的硬盘上。
接口会换地方,页面会改版,但硬盘里那份副本不会过期。
【免费下载链接】GetQzonehistory获取QQ空间发布的历史说说项目地址: https://gitcode.com/GitHub_Trending/ge/GetQzonehistory
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考