news 2026/10/16 8:48:31

GetQzonehistory:把QQ空间十年老说说完整搬到本地

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
GetQzonehistory:把QQ空间十年老说说完整搬到本地

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.txt

Windows下激活命令换成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),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/16 8:48:14

从Buck-Boost到反激变换器:隔离电源设计核心原理与工程实践

1. Buck-boost 为何是很多隔离电源的认知地基我最早接触电力电子时,导师丢给我一句话:"反激这个拓扑,本质就是一句buck-boost 的隔离版本。"当时我听得一脸懵,但后来调了好几个电源项目,才真正明白这句话的分…

作者头像 李华
网站建设 2026/10/16 8:47:14

蛋白质语言模型如何赋能抗病毒肽挖掘预测工具

这两年我一直关注计算生物学里一个很有意思的交叉方向:能不能把自然语言处理领域的大模型思路,直接用到蛋白质序列上,去挖掘有抗病毒活性的多肽。最近看到一套让人眼前一亮的工具,一个微生物研究所的课题组结合预训练蛋白质语言模…

作者头像 李华
网站建设 2026/10/16 8:46:31

QT串口通信实战:监控页面打开串口连接的状态机设计与设备枚举

监控页面做到第七篇,终于要碰串口了。前面把界面、数据表、曲线图都搭好之后,剩下最关键的一环就是让页面真正和设备通信——第一步就是打开一个串口连接。这个“打开”两个字看着简单,里面牵扯的东西其实不少:设备枚举、参数校验…

作者头像 李华
网站建设 2026/10/16 8:44:48

2020年CSP-J复赛真题及题解:T4 方格取数

2020年CSP-J复赛真题及题解:T4 方格取数 题目描述 设有 n m n \times m nm 的方格图,每个方格中都有一个整数。现有一只小熊,想从图的左上

作者头像 李华
网站建设 2026/10/16 8:44:33

TurboVLA 轻量化突破:0.2B 参数实现 32Hz 实时推理

1. 从标题拆解 TurboVLA 的核心突破1.1 0.2B 参数到底意味着什么第一次看到“0.2B 参数实现 32Hz 实时推理”这个描述,我的反应是:这个数字组合不太寻常。0.2B 就是 2 亿参数,放在今天的大模型语境里,这个体量小得几乎可以忽略不计…

作者头像 李华
网站建设 2026/10/16 8:44:19

打印机又连不上?这款小工具,把 USB 打印机变成局域网共享神器

打工人们你们好!这里是摸鱼 特供版~ “打印机又连不上了!”这句话是不是听得耳朵起茧?办公室里只有一台 USB 打印机,多人共享时经常报错;家里电脑、手机、平板都要打印,文件传来传去也很麻烦。Windows 自带…

作者头像 李华