GetQzonehistory:把QQ空间十年老说说完整搬到本地
【免费下载链接】GetQzonehistory获取QQ空间发布的历史说说项目地址: https://gitcode.com/GitHub_Trending/ge/GetQzonehistory
毕业第三年,小林准备把用了十几年的QQ号换新,动手之前想先把空间里从高中开始发的说说存下来。她用的工具是开源项目 GetQzonehistory,专门做一件事:把QQ空间的历史说说导出成Excel、本地图片和一个可浏览的网页。整个流程在本地完成,不经过第三方网站,你只需要扫一次码。
它是怎么把老说说挖出来的
先讲清楚数据来源,后面操作才有概念。它不是逐页翻你的空间主页,而是同时调用QQ空间的两个既有接口:
- 互动消息列表:就是QQ空间里的消息列表,记录了哪些说说、评论、转发产生过通知,程序每次取10条,一直翻到最早的一条。
- 未删除说说接口:你空间自己的说说数据接口,能把所有还没删除的说说连内容、图片、评论一起分页取回,包括2014年之前的老内容。
拿到两份数据后,程序按内容做去重合并:两边都有的说说,保留“未删除说说”那一版,因为这一版字段更全,带评论列表和高清图片地址。合并结果先落成Excel,再把每张图片下载到本地,最后渲染出一个接近空间原样的网页。整条链路是:扫码登录,取两路数据,合并去重分类,生成文件。
安装依赖并第一次运行
准备一个Python 3.6以上环境,然后照做:
git clone https://gitcode.com/GitHub_Trending/ge/GetQzonehistory cd GetQzonehistory python -m venv myenv source myenv/bin/activate pip install -r requirements.txtWindows下激活命令换成myenv\Scripts\activate。装好后运行:
python main.py终端会打印一个字符画二维码,用QQ App扫码确认即可。有两点要提前知道:
- 项目用 pyzbar 解码二维码,依赖系统的 zbar 库。Linux常见装法是
sudo dnf install zbar,macOS用brew install zbar。缺了它,程序启动时会提示并直接退出。 - 登录凭证以明文文件保存在
resource/user/下,按QQ号区分。同一台机器再运行时,程序会列出已登录账号让你选序号,输入0则重新扫码。
打开结果目录的那一刻
跑完后程序会自动打开resource/result/目录,里面有一个以你QQ号命名的文件夹。点进去会看到几样东西:
QQ号_全部列表.xlsx:合并后的完整时间线,列是时间、内容、图片链接、评论。QQ号_说说列表.xlsx和QQ号_转发列表.xlsx:只挑出你自己发的说说与转发,单独看更方便。QQ号_留言列表.xlsx和QQ号_其他列表.xlsx:前者是好友对你说说的留言,后者是消息列表里出现的好友动态。QQ号_好友列表.xlsx:互动过的对方昵称、QQ号、空间主页,按QQ号去重。pic/文件夹:成功下载到的全部图片,文件名取自说说内容,方便反查是哪条。QQ号_说说网页版.html:浏览器打开就是按时间排列的说说页面,老QQ表情码也被替换成了对应表情图。
终端最后会打印一份统计:共多少条消息、多少说说和转发、最早一条发布在什么时候、下载了多少图片。用这几个数字对照你自己的记忆,就能判断导出范围是否符合预期。
想再深一层:登录态、缓存与中断(可选阅读)
对实现好奇的话,可以看这几处:
- 消息列表的总条数不是接口直接返回的,而是用二分法探测出来的,逻辑在 util/RequestUtil.py。程序反复请求“偏移量为X取100条”,根据有没有内容二分逼近总数,每次探测都要真实请求一轮,所以开头这一步就会花掉几分钟。
- 第二路数据的原始响应会缓存成JSON存到
resource/fetch-all/你的QQ号/,下次运行直接复用,只补消息列表这一路。 - “未删除说说”的请求在 util/GetAllMomentsUtil.py,网页模板和QQ表情替换逻辑在 util/ToolsUtil.py。
- 抓取中途按 Ctrl+C 不会白干,程序注册了信号处理,会把手头已有的数据先落盘再退出。
- fetch_all_message.py 是另一个独立入口,只处理“未删除说说”这一路,输出一份Markdown和本地图,适合只要自己说说的场景。
它拿不到什么,哪些环节容易卡住
边界说清楚,省得跑完对着缺口发懵:
- 已删除的说说拿不到,“未删除说说”接口天然不含它们;只给自己可见、从未出现在消息列表里的早期说说,两路都覆盖不到,README里也写明了这一点。
- 评论有上限,按每条100条取,更早或超量的评论不全。
- 慢是正常现象。消息列表每批10条,批间和请求后都有固定间隔,几千条消息可能耗时几十分钟,开头二分探测也要几分钟。终端持续滚动输出就说明在正常推进。
- 图片下载是每条链接只请求一次,非200就跳过,没有重试。终端统计的图片数少于Excel里图片链接数,多半是老图已失效,不算程序故障。
- 去重按内容精确匹配,两条文案完全相同的说说会被当成一条。
- 网页只是浏览层,图指向远端地址;长期备份要认
pic/里的本地文件和Excel。 - 登录cookie是明文存在
resource/user/的,公共电脑用完记得清理。
排障时记住两条:提示“登录失败”就重新运行扫码;如果某一步长时间无输出,优先检查网络,多数情况是请求超时被跳过了。
写在最后
GetQzonehistory解决的问题很具体:把QQ空间里可见、且消息列表够得着的部分,变成你自己磁盘上的结构化文件。它变不出已删除的内容,只是把能拿到的东西可靠地搬出来。对“换号之前先存一份”这类需求,这就够了。
【免费下载链接】GetQzonehistory获取QQ空间发布的历史说说项目地址: https://gitcode.com/GitHub_Trending/ge/GetQzonehistory
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考