qzonearchive开源工具:一键备份QQ空间全站内容为本地存档 2026年8月29号晚上刷 GitHub Trending日榜上挂着一个有点特殊的上榜项目gaoshu705/qzonearchive。最近热搜里也一直能看到它的名字比如“github恢复qq空间”“qzonearchive github”这类词点进去看了下项目说明仔细读完发现这东西确实有上榜的理由——它是一个能把 QQ 空间全站内容说说、日志、留言板、相册评论完整打包成离线网页存档的开源工具。说白了就是帮你给十几年的青春记忆做一次性全量备份。不管你是想清理空间又怕删了后悔还是想把 QQ 空间的内容迁到自己博客里又或者只是想找个周末动手玩点有意思的开源项目这个项目都挺值得研究。这篇文章我打算从项目拆解、实现逻辑、实操步骤到常见坑位一口气讲清楚。1. 热榜项目整体拆解qzonearchive 凭什么挂一天榜单1.1 项目定位把 QQ 空间“装”进本地文件夹先不扯底层代码说人话qzonearchive 是个命令行工具你跑一下它会模拟你登录 QQ 空间之后的浏览视角把你账号下能看到的信息——包括每一条说说、每篇日志、留言板的留言、相册里的图片链接、评论区的往来互动——全部抓下来整理成结构化的数据文件然后生成一个不依赖服务器的静态网页包。这个网页包拷到哪都能打开双击 index.html 就能像浏览一个小型个人站点一样翻看当年发过的所有内容。很多人在热词里搜“github恢复qq空间”其实项目本身并不是“恢复”什么它的核心逻辑是“备份和重建”。你可以把 QQ 空间看作一个线上数据库哪天账号异常、内容误删、或者平台调整规则你多年的记录可能说没就没。qzonearchive 做的事情就是趁数据还在赶紧做个完整的本地快照。快照拿到手想恢复的话就直接打开那套 HTML 文件资料还是你的资料。1.2 解决的真问题数据主权和记忆留存说得再大一点这个项目踩中的是“数据主权”这个很多人都有但说不清的痛点。我们每天在平台上生产内容但内容的所有权和可迁移性其实非常模糊。平台给不给你导出接口给不给完整的数据包往往不是用户能决定的。而 qzonearchive 这类工具代表了一种民间解法只要你有权访问自己的数据技术上就能把它们完整地取回来放到自己手里。它不碰别人的隐私它只镜像“你自己能看到的东西”这在使用逻辑上是站得住的。我自己之所以对这个项目高看一眼是因为这类个人数据归档工具往往比很多花里胡哨的 AI 项目更持久。它解决的是刚需而且技术方案一旦跑通几年内都不会过时。哪怕 QQ 空间哪天改版了只要有人维护适配工具就还能继续用。1.3 适合谁用三种人和三种玩法根据项目讨论区里的反馈和热搜词里的搜索习惯我总结出三类典型用户情怀型用户QQ 空间里存着 2009 年到 2015 年的非主流语录、情侣空间截图、同学留言。功能更新早就停了但偶尔还会回去翻一翻。用这个工具给青春做个备份是最常见的动机。内容迁移型用户想把 QQ 空间的日志和说说搬到自己的博客、Notion 或本地笔记库里。qzonearchive 导出的结构化数据JSON比手工复制粘贴效率高太多。开源技术爱好者项目本身的技术架构——登录态获取、HTML 解析、并发下载、静态站点生成——都是很经典的 Python 实战案例拿来练手或者二次开发都很合适。2. 技术原理与实现逻辑它不是爬虫是一次自我镜像2.1 数据获取用你自己的登录态不碰任何人的隐私很多人一上来就误会觉得这类项目是不是个爬虫到处抓别人空间的内容。不是的。qzonearchive 的核心逻辑是通过你主动提供的 Cookie让程序以你的身份去访问你权限范围内的页面。你平时在浏览器里能看到什么它就抓什么。看不到的它也不会尝试去越权获取。QQ 空间的网页端加过不少校验和动态加载逻辑直接用 requests 裸请求很容易被拦所以项目内部做了不少细节处理比如带 Referer、维护会话、模拟浏览器特征等。需要注意一个关键点Cookie 是一个身份凭证相当于你把钥匙交给了程序。所以使用时要保证脚本来自可信的仓库跑之前扫一眼代码跑完最好把配置里的 Cookie 删掉或者用完后在 QQ 安全中心主动失效一遍会话。这是玩所有同类工具的基本素养。2.2 数据解析从 HTML 和接口返回里要数据QQ 空间网页版是典型的服务端渲染加局部异步更新结构。说说列表、评论、点赞这类数据有的能从 HTML 标签里直接抠出来有的需要分析页面的 Ajax 接口模拟请求参数拿到 JSON 再解析。qzonearchive 的解析链路大概是这样的先请求空间首页拿到基础页面框架和自己的用户标识uin。逐项进入说说、日志、留言板、相册等模块每一种内容对应一套解析逻辑。对每一条内容提取正文、发布时间、配图 URL、评论列表、点赞列表等字段清洗之后写入 JSON。相册里的图片默认不直接下载原图而是先记录 URL后面根据参数选择是否下载避免一次跑太久。这里最麻烦的是分页和翻页。QQ 空间的老接口里翻页往往依靠特殊的起始位置参数比如pos而且不同类型的模块翻页逻辑还不一样。项目代码里维护了一套针对性的处理逻辑这也是为什么它值得上榜——能把这么脏的数据源清洗得整整齐齐本身就是体力活加技术活。2.3 数据呈现从 JSON 到可离线浏览的静态站点解析完的数据如果只是一堆 JSON对普通用户还是不够友好。qzonearchive 设计了模板渲染模块把 JSON 数据灌进一套 HTML 模板里最终生成一个完全本地化的静态站点。这个站点的好处非常明显不需要装数据库不需要启动服务双击就能看页面结构和原版空间有点像但又比原版清爽没有任何广告和干扰支持全文搜索如果模板里带了简单索引翻老内容很快可以整体打包拷贝到移动硬盘里保存过几十年打开还能看。我在本地跑完生成的目录结构大概是这样的output/ ├── index.html # 总入口类似个人主页 ├── moods/ # 按时间分组的说说列表 ├── diaries/ # 日志归档 ├── guestbook/ # 留言板内容 ├── albums/ # 相册索引与图片文件 ├── assets/ # CSS / JS 等静态资源 └── data/ # 原始 JSON 结构化数据这种原始数据 静态生成的架构比把所有内容塞进一个大 HTML 文件要科学得多。数据层和展示层分离以后想换模板重新生成数据还在重新渲染一遍就行。2.4 架构思路带来的启发一件事归一件事就算你不用这个项目它的设计思路也值得学采集数据获取和解析数据处理分开职责边界清晰归档JSON和展示静态站点分离数据不会因为展示层升级而丢失模块按内容类型拆分说说、日志、留言板、相册各自维护后续改动互不影响对外暴露的参数配置化哪些内容要下、图片要不要保存原图、并发数调多少都写在配置里。这种代码组织方式放在任何一个数据处理项目里都是加分项。看这个项目源码的过程比逛几十个教你写爬虫的教程都管用。3. 实操步骤从零跑通一次 QQ 空间全站归档3.1 前置准备Python 环境、Git、浏览器在动手之前先把基础环境备齐。qzonearchive 是用 Python 写的所以肯定需要 Python 环境建议用 3.9 以上版本。安装方式我建议直接用 Miniconda 或者官方 Python 安装包把 Python 加到系统 PATH 里避免后面命令行找不到。接下来三样东西# 1. 确认 Python 版本 python --version # 2. 确认 Git 已安装 git --version # 3. 准备一个现代浏览器Chrome 或 Edge 都行如果你平时不太用命令行建议在 Windows 上直接用 PowerShell或者装一个 Windows Terminal体验会舒服很多。Mac 用户直接用自带的终端就行。3.2 获取凭证安全地把 Cookie 交给脚本这一步是整个过程中最容易被忽略、也最关键的。qzonearchive 不让你输账号密码而是让你从浏览器里复制 Cookie原因很简单自动登录 QQ 空间涉及验证码、滑块、设备风控等一系列反自动化机制程序硬怼很容易触发异常。而你在浏览器里手动登录过Cookie 本身已经通过验证程序拿它去请求数据风险更小。具体操作步骤用 Chrome 打开并登录i.qq.com或user.qzone.qq.com确认能正常看到自己的空间。按F12打开开发者工具切到 Network网络面板。刷新页面随便点一个请求找到请求头里的Cookie字段。复制完整的 Cookie 值粘贴到项目的配置文件比如config.json或.env里。我是强烈建议跑完后把配置文件里的 Cookie 清掉并且去 QQ 安全设置里把登录设备管理中的网页会话删掉反正存档已经生成了凭证用完就该让位。注意Cookie 相当于账号的临时钥匙。千万别把包含 Cookie 的配置文件传到 GitHub 上也别截图发到聊天群里。这个一旦泄露别人就能用你的身份操作空间。3.3 运行归档命令参数设置与执行细节环境准备好、Cookie 也拿到手之后开始正式跑归档。先把项目克隆到本地git clone https://github.com/gaoshu705/qzonearchive.git cd qzonearchive装依赖项目一般会提供一个requirements.txtpip install -r requirements.txt然后看一下配置项重点关心这几个参数作用我建议的值uin你的 QQ 号填自己那个cookie浏览器复制的凭证跑完就删download_images是否下载原图第一次跑建议false先出索引concurrency并发请求数默认即可别超过 5output_dir输出目录默认output就挺好启动命令通常类似python archive.py --uin 123456789 --cookie 你的cookie值 --download-images false第一次跑我建议先把download-images关掉先跑文本内容把所有说说、日志、留言板的结构建好。这样速度快遇到问题也能快速定位。等整站文本归档确认没问题了再单独跑一次图片下载把相册原图补全。执行的时候注意观察日志输出。一个几百条说说的空间通常几分钟内就能把文本部分跑完。如果某个模块长时间没动静大概率是翻页逻辑有问题或者触发了频率限制可以 CtrlC 中断后再调整参数。3.4 产物检查归档目录里到底有什么跑完之后到输出目录里逛一圈重点看这几样东西index.html打开它应该能看到一个类似个人主页的界面左边有导航右边展示内容。data/目录里的 JSON 文件这是最值钱的东西。每条说说的原始字段、发表时间、点赞数、评论内容全在以后要做数据分析、做词云、做时间轴都靠它。图片目录图片会按相册或时间来组织文件名为原始图片名加哈希后缀避免重名覆盖。我第一次跑完打开index.html看到自己 2011 年发的那条今天心情不错的说说连评论里老同学的黑历史留言都还原得清清楚楚那一下恍惚有种盗墓笔记里开棺的既视感。3.5 一个扩展玩法把 JSON 数据变成自己的年度报告既然数据已经结构化到本地除了直接看静态页面你还能做点有趣的事。比如把所有说说按年份分组统计每个月的发文频率用 ECharts 画一张折线图再比如用 jieba 分词把说说内容拆开做一个高频词词云甚至可以把所有说说按时间顺序拼成一个大文本训练个简单的话题分类模型。qzonearchive 生成的数据格式足够干净这就是它比网页存档更深一层价值的地方。工具本身只是取数怎么用好取回来的数空间非常大。4. 顺手聊聊GitHub 页面访问慢或打不开时我都是怎么处理的4.1 先分清楚是哪种打不开很多同学搜github打不开github官网进不去其实问题不一定是同一个。我自己的经验是分几种情况页面加载极慢图片和样式经常加载失败但有时候刷新能出来完全拒绝连接浏览器直接提示无法访问此网站能打开网站首页但下载 Release 附件时速度只有十几 KB/sraw.githubusercontent.com 这个域名经常超时导致项目里的图片和代码片段显示不出来。每一种情况的解决思路都不太一样但前提都一样先确认你自己的网络本身没问题。最简单的排查办法是换一个网络环境试试比如手机热点。如果用热点秒开说明问题大概率出在本地网络链路或 DNS 解析上如果用热点也一样那可能就是域名解析被干扰了需要想别的办法。4.2 四个我用下来最顺的正规手段这里先声明我不推荐来路不明的所谓加速工具安全性没法保证。下面这些都是技术社区常见的、相对稳妥的方案。第一改 hosts 文件。GitHub 的 CDN 节点很多有时候 DNS 解析到某个响应慢的 IP导致整体卡顿。你可以从网上的公开项目里查到当前 GitHub 各域名对应的实际 IP手动写入 hosts 文件绕开不稳定的解析结果。这个方法成本低尽量用管理员权限去修改 C 盘里的 hosts 文件Windows 路径通常是C:\Windows\System32\drivers\etc\hosts改完执行ipconfig /flushdns刷新 DNS 缓存再重新访问 GitHub 就会发现速度明显不一样。第二用 GitHub 镜像站只读访问。社区里有一些自动同步 GitHub 热门仓库的镜像网站搜索项目名就能直接看源码和文件结构。注意这类网站基本只支持只读操作不能登录、不能发 Issue、不能提交代码但应急查看代码、读 README、下载单个 Release 压缩包是够用的。对于一天只刷几次榜单、不经常提交代码的人来说是个不错的备选方案。第三用 jsDelivr 这类 CDN 加速静态资源。如果你在 GitHub 上建了博客或者有静态资源仓库raw 文件加载慢很麻烦可以把资源地址指向cdn.jsdelivr.net/gh/用户名/仓库名分支/路径这样访问速度会好很多。这是合法合规的 CDN 服务很多开源项目都在用也会缓存 GitHub 上的公开文件适合看文档、看图片预览。第四使用 GitHub Desktop 配合 SSH 协议。如果你主要遇到的是克隆和推送慢可以试试把远程地址从 HTTPS 改成 SSH 协议生成密钥对并添加到 GitHub 设置里执行git remote set-url origin gitgithub.com:gaoshu705/qzonearchive.gitSSH 协议在某些网络环境下比 HTTPS 更稳定而且不用每次输入账号密码体验会好一些。4.3 不同场景下我推荐组合使用简单总结一下我自己的使用组合日常刷榜单用镜像站和 hosts 双保险遇到下载 Release优先走镜像站或者本地代理配置好的下载工具如果是克隆大仓库那我就会用git clone加 SSH 协议再加一份浅克隆参数--depth 1只拉最新一次提交速度会快很多。组合使用比只靠单一方案靠谱很多毕竟 GitHub 的访问问题很难用一个手段全搞定多点备份什么时候都比单点强。5. 常见问题与排查技巧实录5.1 常见报错速查表我把在实际操作中可能遇到的高频问题整理成一个速查表建议收藏跑的时候遇到问题直接对号入座。问题现象可能原因解决办法登录后 Cookie 复制了但提示未授权Cookie 不完整或已过期重新登录 QQ 空间后再次复制确认复制的是Cookie请求头里的完整值说说能抓到日志一片空白日志模块的翻页参数变了检查项目是否有更新或到 GitHub 仓库的 Issue 区看有没有同类反馈跑着跑着报 502/504请求频率太高触发服务端限制降低并发数加长请求间隔必要时暂停几小时再继续图片全部下载失败图片 URL 需要带 Referer 才能访问检查代码里是否有补全 Referer 的逻辑没补的可以手动改生成的 index.html 样式错乱静态资源路径使用了绝对路径用相对路径替代或者把 assets 目录和 index.html 放在同一层运行时报缺少模块依赖没装全执行pip install -r requirements.txt确保没报错空间内容很多跑了一个小时还没完并发太低或图片下载过慢文本归档阶段建议不开图片下载文本部分速度会非常快5.2 我踩过的三个坑第一个坑是 Cookie 没过期但权限不够。我之前登录的是 QQ 音乐然后直接复制 Cookie 去请求空间接口结果空间返回的页面和正常登录不一致很多模块都抓不到内容。后来改成先访问user.qzone.qq.com手动确认能看到空间再说问题就没了。所以一定要确保 Cookie 对应的登录态覆盖空间应用。第二个坑是相册下载用量巨大。一开始我没开图片下载很顺地跑完了全部文本。后来想看效果直接开着全量下载跑一个 2000 多张图片的空间压得我硬盘空间报警还因为请求太频繁被空间临时限制了一段时间。后来学乖了先下载缩略图索引挑重要的相册再下载原图分批次执行平稳很多。第三个坑和编码有关。有些老说说的内容里带着各种奇怪字符和表情符号导出到 JSON 后文字内容能对上但到了生成静态页面时模板渲染偶尔会报 Unicode 编码问题。解决办法是在读取和写入 JSON 时统一用encodingutf-8指定编码并且确保生成 HTML 时声明meta charsetutf-8。这个问题在 Windows 系统上尤其容易遇到Mac 和 Linux 上少见一些。5.3 给新手的几条安全建议第一个建议永远不要在公共电脑上跑这类工具。Cookie 一旦被记录你的空间就处于裸奔状态。第二个建议第一次跑完归档建议把 output 目录整体压缩加密存放。毕竟里面包含了你多年的私人内容和互动记录等同于一本私密日记加密保存更稳妥。第三个建议不要用 qzonearchive 去抓取任何你没有访问权限的空间内容。工具设计时是自我镜像如果你改变了它的用途去抓别人的私密内容既不合规也容易引火上身。技术本身是中性的用在哪里体现的是人的选择。写在最后我的一点经验从晚上刷到热榜到本地完整跑通我对 gaoshu705/qzonearchive 的评价很高。它让我重新意识到一件事我们经常把内容放在网上等同于内容永远都在但现实是平台调整、账号异常、规则变化任何一个风吹草动都可能让多年的记录瞬间消失。给自己心爱的内容做一次离线备份不是折腾是低成本高回报的自我保护。如果你也想试试这个项目我建议选一个周末的下午先把文本归档跑一遍等看到index.html里整整齐齐的自己那些年再决定要不要折腾图片和更深入的玩法。最后留一个小技巧跑完之后把data/目录单独复制一份到网盘里那份 JSON 数据才是整个项目最有价值的资产比任何静态页面都更值得长期保存。