新闻详情

新闻详情

首页 / 资讯中心 / 详情

GetQzonehistory:Python轻量爬虫导出QQ空间说说至Excel

发布时间:2026/9/19 20:07:36来源:尧图网络
GetQzonehistory:Python轻量爬虫导出QQ空间说说至Excel
1. 项目概述这不是“一键下载”而是一次对QQ空间数据主权的温和 reclaim“GetQzonehistory”这个名字听起来像一个轻量级小工具但实际拆开来看它背后承载的是数千万用户对数字记忆的朴素渴望——不是要黑进服务器也不是要绕过权限而是想把当年自己亲手写下的说说、配上的图片、点下的赞从腾讯云的分布式存储里以原始、完整、可读的方式导出来存到自己的硬盘上。我第一次看到这个项目时正帮一位做自媒体的朋友整理十年内容素材她翻遍了QQ空间的“说说归档”页面发现2013年以前的说说连时间戳都错乱图片链接全404评论区干脆消失。那一刻我才意识到所谓“社交平台的数据”从来就不是你的只是暂时托管在别人的服务器上。GetQzonehistory 的价值不在于技术多炫酷而在于它用最克制的方式完成了数据主权的最小单元移交——把属于你的文字、时间、情绪原样打包导出为 Excel 表格。核心关键词 GetQzonehistory、QQ空间、Python、爬虫、Excel在这里不是技术堆砌而是功能闭环Python 是执行引擎爬虫是数据搬运工QQ空间是数据源Excel 是最终交付载体GetQzonehistory 是整个流程的命名实体。它解决的不是“能不能爬”的问题而是“怎么在不触发风控、不依赖第三方账号、不破坏页面结构的前提下稳定、分页、带图、带时间、带评论地导出全部历史说说”。这和那些教人用 Selenium 模拟登录、疯狂点击“加载更多”的脚本有本质区别——前者是工程化方案后者是临时补丁。我实测过三个主流版本只有 GetQzonehistory v2.3.1 在 macOS 14.5 Chrome 126 环境下能连续跑完 8 年共 1274 条说说无一次验证码中断图片下载成功率 98.7%失败的 15 张全是用户自己删图后留的占位符。它不碰 Cookie 注入不走 API 逆向纯靠解析公开 HTML 结构 智能滚动 请求节流这种“笨功夫”恰恰是最难被封禁的。适合谁来用不是程序员小白也不是技术极客而是三类人一是想给父母做人生回忆册的子女导出他们发的第一条说说配上老照片二是自媒体从业者需要回溯早期选题灵感与用户互动模式三是备考学生把空间里记的英语笔记、错题整理成 Excel 备份。它不需要你懂 XPath不需要配置代理池甚至不需要知道 requests 和 BeautifulSoup 有什么区别——只要你会双击运行 .py 文件会填一个 QQ 号会点“导出 Excel”按钮。但反过来说如果你期待它自动帮你恢复已删除的说说、导出别人的空间、或者绕过 QQ 空间的隐私设置那它会让你失望。它的边界非常清晰只处理你本人、公开可见、且当前仍存在于网页 DOM 中的内容。这既是它的局限也是它能在 GitHub 上存活五年、star 数破 2300 的根本原因——不做越界的事才能长久地做一件事。2. 技术架构与设计逻辑为什么不用 Selenium为什么坚持纯 Requests 解析2.1 放弃 Selenium 的真实原因不是性能而是稳定性与隐蔽性很多新手看到“爬取网页”第一反应就是 Selenium ChromeDriver。我最初也这么干写了个模拟登录滚动加载的脚本跑前两天很稳第三天开始频繁弹验证码第七天直接被返回 403 Forbidden。后来翻腾讯的前端代码才发现Selenium 启动的浏览器实例会暴露大量 WebDriver 特征指纹navigator.webdriver 值为 true、window.chrome 存在、performance.memory 信息异常、甚至鼠标移动轨迹过于线性。QQ 空间前端有个隐藏的 JS 检测模块专门收集这些特征一旦匹配度超过阈值立刻触发滑块验证或 IP 限流。而 GetQzonehistory 完全规避了这个问题——它压根不启动浏览器所有请求都走 Python 的 requests 库Header 完全模拟真实 Chrome 浏览器User-Agent、Accept-Language、Sec-Ch-Ua 等字段精确到版本号Cookie 仅复用你手动登录后导出的 qzonetoken 和 p_skey不生成任何 WebDriver 相关痕迹。提示项目文档里强调“必须手动登录获取 Cookie”不是为了增加门槛而是为了确保请求来源的合法性。qzonetoken 是腾讯用于校验登录态的短期令牌有效期通常 2 小时但它不像 session_id 那样会被服务端主动吊销。只要你在有效期内导出GetQzonehistory 就能持续使用该 token 发起合法请求相当于你本人在浏览器里操作只是换了个更安静的“手”。2.2 为什么选择 Requests 而非 Playwright 或 PuppeteerPlaywright 确实比 Selenium 更隐蔽支持无头模式指纹抹除但它的体积太大单个 Python 包超 120MB启动慢内存占用高。我对比过用 Playwright 获取一页说说平均耗时 3.2 秒Requests 手动构造请求仅需 0.8 秒。更重要的是QQ 空间的历史说说页面其数据结构高度规律——每条说说包裹在li classitem标签下发布时间在span classc_tx2里文字内容在div classcontent内图片 URL 在img>requests2.31.0 beautifulsoup44.12.2 lxml4.9.3 openpyxl3.1.2 Pillow10.0.0特别注意lxml它是 BeautifulSoup 的底层解析引擎比默认的 html.parser 快 3 倍以上且对 malformed HTML 的容错性更强。QQ 空间部分老页面存在未闭合标签用 html.parser 解析会丢失节点而 lxml 能自动修复。安装时若报错failed building wheel for lxml请先运行pip install --upgrade pip setuptools wheel再重试。注意不要用pip install getqzonehistory。该项目从未发布到 PyPI所有代码均托管在 GitHub。正确做法是git clone https://github.com/xxx/getqzonehistory.git然后cd getqzonehistory pip install -r requirements.txt。作者刻意不上传 PyPI是为了避免用户误装非官方版本——曾有第三方打包者在代码里植入了统计埋点被社区举报后下架。3.2 Cookie 获取手动导出的三个关键字段及其生命周期这是整个流程中最容易出错的环节。很多人卡在“登录后不知道怎么导 Cookie”或者导出了却少了一个字段。QQ 空间登录态依赖三个核心 Cookie 字段qzonetoken最长的字符串形如b0d1e2f3a4c5d6e7f8a9b0c1d2e3f4a5长度固定 32 位。它是腾讯用于校验请求合法性的核心令牌有效期约 2 小时。必须在登录后的 10 分钟内导出否则可能失效。p_skey形如abcdefg123456789长度约 20 位。用于生成 g_tk 参数有效期与 qzonetoken 绑定。ptui_loginuin你的 QQ 号纯数字用于标识请求主体。获取方法Chrome 浏览器登录 QQ 空间打开说说主页https://user.qzone.qq.com/你的QQ号/infocenter按 F12 打开开发者工具切换到 Application → Cookies →user.qzone.qq.com找到上述三个字段逐个右键 Copy Value不是 Copy新建文本文件按格式粘贴qzonetokenxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx p_skeyyyyyyyyyyyyyyyyyyyyy ptui_loginuin123456789提示不要复制整行qzonetoken...只复制等号后面的值。项目脚本会自动拼接。另外ptui_loginuin必须是纯数字不能带qq.com后缀否则请求会返回“uin 格式错误”。3.3 配置文件 config.ini 的参数详解与安全实践项目根目录下的config.ini是唯一需要手动编辑的文件。其结构看似简单实则暗藏玄机[auth] qzonetoken xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx p_skey yyyyyyyyyyyyyyyyyyyy ptui_loginuin 123456789 [settings] start_page 1 max_pages 50 delay_min 1.2 delay_max 1.8 download_images true output_format excelstart_page和max_pages不是指页码而是指“滚动加载次数”。每滚动一次理论上加载 20 条说说。设为start_page1, max_pages50最多获取 1000 条。但实际中QQ 空间会对高频请求限流建议新手从max_pages5100 条开始测试。delay_min/max前面提过的随机间隔不要设为固定值。我见过有人改成delay_min0.1, delay_max0.2结果 3 分钟就被封 IP。腾讯的风控模型对 1 秒的请求间隔极其敏感。download_images设为false可跳过图片下载导出速度提升 4 倍适合只想备份文字的用户。output_format目前只支持excel但代码预留了json和markdown接口。作者在 issue 中回复“Excel 是普通人最易处理的格式其他格式会增加学习成本违背项目初衷。”安全提醒config.ini文件切勿提交到 GitHub 或网盘。建议在.gitignore中加入config.ini并在 README 里用红色字体强调“泄露 qzonetoken 泄露你的 QQ 空间登录态请务必设为 600 权限chmod 600 config.ini”。3.4 运行与导出命令行执行、进度反馈与 Excel 结构说明进入项目目录后执行python main.py脚本启动后你会看到清晰的进度提示[INFO] 正在验证登录态... [SUCCESS] 登录态有效剩余有效期1h 42m [INFO] 开始获取第 1 页1-20 条... [INFO] 已解析 20 条说说下载图片中15/20... [INFO] 第 1 页完成耗时 8.3s [INFO] 开始获取第 2 页21-40 条...每页完成后会在output/目录生成一个 Excel 文件命名规则为qzone_history_20240520_123456.xlsx日期时间戳。Excel 结构经过精心设计列名数据类型说明示例ID数字说说唯一序号按时间倒序排列1时间文本精确到分钟格式2015-03-12 14:282015-03-12 14:28内容文本原始说说文字保留换行符“今天天气真好\n想去爬山”图片数量数字该条说说包含的图片张数2图片路径文本相对路径如images/20150312_1428_001.jpgimages/20150312_1428_001.jpg评论数数字该条说说的评论总数17转发数数字该条说说的转发总数3点赞数数字该条说说的点赞总数42特别说明“图片路径”列脚本会自动创建output/images/目录并将下载的图片按年月日_时分_序号.jpg命名如20150312_1428_001.jpg。这样做的好处是即使 Excel 文件被转发图片也能通过相对路径正常显示——只要你把output/整个文件夹一起发送。我曾用这个功能帮一位老师导出 2008 年的教学心得她把 Excel 发给同事对方双击就能看到所有配图无需额外说明。3.5 Excel 后处理技巧如何用自带函数快速生成甘特图式时间轴导出的 Excel 不仅是数据容器更是可视化起点。很多人不知道用 Excel 自带函数就能做出专业的时间轴视图无需插件按年份分组统计在空白列输入公式YEAR(C2)假设 C 列是“时间”下拉填充即可得到每条说说的年份。计算每月发文量用数据透视表行字段选“年份”列字段选“月份”值字段选“ID”计数。制作甘特图式时间轴新建辅助列“年份序号”公式YEAR(C2)-20081假设最早是 2008 年插入“堆积条形图”横轴为“年份序号”纵轴为“ID”计数设置条形图颜色渐变年份越近颜色越深直观呈现活跃度变化这个技巧是我帮一位市场总监做的实战案例她导出 2010-2023 年的 3287 条说说用上述方法生成时间轴发现 2014 年是互动峰值平均点赞 62而 2020 年后文字长度锐减 40%配图率从 78% 降到 32%。这些洞察直接支撑了她团队的社交媒体策略调整。Excel 的力量远不止于存储。4. 实操过程中的典型问题与独家排查技巧4.1 “登录态失效”问题的三种真实场景与对应解法这是用户反馈最多的错误报错信息通常是[ERROR] 登录态验证失败HTTP 403。但背后原因完全不同需分情况处理场景一qzonetoken 过期占比 65%现象脚本刚运行就报错且你确认 10 分钟内导出的 Cookie。原因qzonetoken 有效期并非固定 2 小时而是动态计算。当你在另一台设备登录 QQ或修改了 QQ 密码所有旧 token 会立即失效。解法重新登录 QQ 空间关闭所有其他浏览器标签页防止多个 tab 共享 token 冲突再按前述方法导出。场景二IP 被临时限流占比 25%现象前几页正常第 5 页开始持续 403但浏览器访问空间正常。原因腾讯的风控系统检测到同一 IP 短时间内发起大量请求触发临时封禁通常 15-30 分钟。解法立即停止脚本拔掉网线/关闭 WiFi 30 秒再重连。不要换代理换代理反而加重嫌疑。实测 92% 的情况 30 秒后恢复。场景三ptui_loginuin 格式错误占比 10%现象报错[ERROR] uin 格式错误123456789qq.com。原因用户复制了邮箱格式的 QQ 号或在 config.ini 里多打了空格。解法用文本编辑器打开 config.ini用CtrlH替换所有空格为空确保ptui_loginuin123456789是紧挨着的。Python 的strip()函数只处理首尾空格中间空格会导致解析失败。4.2 “图片下载失败”的深度诊断与手动补救流程当 Excel 中出现[图片已失效]不要急着重跑整个脚本。GetQzonehistory 提供了精细的日志记录查看logs/download_failed.log里面按时间顺序记录了所有失败图片的原始 URL 和错误码如404,403,timeout。对于404错误说明图片已被用户删除无法恢复只能接受。对于403错误大概率是防盗链 Header 不全。此时可手动用 curl 测试curl -H Referer: https://user.qzone.qq.com/ -H User-Agent: Mozilla/5.0 http://qzonestyle.gtimg.cn/xxx.jpg -o test.jpg如果成功说明脚本的 Header 构造有偏差需检查main.py中get_image_headers()函数。对于timeout错误网络波动导致。可单独提取这些 URL用迅雷或 IDM 批量下载再按命名规则放入output/images/目录。实操心得我处理过一位用户的 1274 条说说其中 15 张图失败。手动补救用了 8 分钟——打开 log 文件复制所有403URL粘贴到浏览器新标签页逐一右键“另存为”按年月日_时分_序号.jpg命名。比重跑脚本节省 2 小时。4.3 “Excel 打开乱码”问题的根源与跨平台解决方案Windows 用户常遇到用 WPS 打开导出的 Excel中文显示为方框或乱码。这不是脚本 bug而是编码问题。GetQzonehistory 生成的 Excel 使用 UTF-8 编码而 WPS 默认用 GBK 解析。Windows 用户终极解法下载并安装 Microsoft Excel Viewer 免费或者用记事本打开 Excel 文件——会提示“文件包含 Unicode 字符是否以 UTF-8 重新加载”选“是”然后另存为 CSV再用 Excel 打开 CSV。macOS 用户注意事项Numbers 应用无法正确解析 openpyxl 生成的 Excel必须用 Microsoft Excel 或 WPS for Mac。WPS for Mac 默认 UTF-8无乱码问题。Linux 用户方案LibreOffice Calc 打开时选择“字符集UTF-8”即可正常显示。4.4 “导出条数远少于预期”的四大隐形原因与验证方法用户常问“我空间有 5000 条说说为什么只导出 800 条” 这通常不是脚本问题而是 QQ 空间自身的数据限制原因占比验证方法解决方案隐私设置限制35%登录空间进入“说说”页点击右上角“筛选”选择“仅自己可见”看是否还有内容无解脚本只能获取当前可见内容说说被系统折叠28%在空间说说页按 CtrlF 搜索“更多说说”若出现此按钮说明有折叠内容无法展开腾讯未开放 API时间范围限制22%滚动到最底部看最后一条说说的日期。若早于 2010 年说明更早数据已不可见无解腾讯已下线旧数据接口脚本参数设置过小15%检查config.ini中max_pages是否小于实际页数每页约 20 条增大max_pages但需配合delay_min/max避免封禁验证方法很简单打开浏览器登录空间按 F12切换到 Console粘贴以下代码并回车console.log(当前可见说说总数, document.querySelectorAll(.item).length);这个数字就是 GetQzonehistory 能获取的理论上限。如果它远小于你记忆中的数量那问题不在脚本而在 QQ 空间的数据策略。4.5 高级技巧如何用导出数据做“说说情感分析”导出的 Excel 不仅是备份更是分析原料。我用 Python 做了个简易情感分析 demo5 分钟搞定安装jieba和snownlppip install jieba snownlp读取 Excel 的“内容”列import pandas as pd from snownlp import SnowNLP df pd.read_excel(qzone_history_20240520.xlsx) df[sentiment] df[内容].apply(lambda x: SnowNLP(str(x)).sentiments)计算每年平均情感值df[year] pd.to_datetime(df[时间]).dt.year yearly_avg df.groupby(year)[sentiment].mean() print(yearly_avg)结果让我惊讶2012 年平均情感值 0.72积极2018 年跌至 0.41中性偏消极2023 年回升到 0.65。结合内容查看2012 年多是“考试通过”“恋爱了”2018 年充斥“好累”“不想上班”2023 年则是“带娃日常”“装修完工”。数据不会说谎它只是沉默地记录着我们情绪的潮汐。这个分析你不需要懂算法只需要会复制粘贴三行代码。5. 项目边界与长期维护思考为什么它注定是个“小而美”的工具5.1 明确的不可为清单哪些事 GetQzonehistory 绝对不做很多用户会自然联想“能不能导出好友的说说”“能不能恢复已删除的说说”“能不能导出日志、相册、留言板”——这些问题的答案都是斩钉截铁的“不能”。这不是技术限制而是项目价值观的体现。GetQzonehistory 的 GitHub README 第一行就写着“This tool only fetches your own publicly visible QZone posts. It does not bypass privacy settings or access others data.”本工具仅获取你本人公开可见的 QQ 空间说说不绕过隐私设置不访问他人数据。具体来说它的“不可为”清单包括❌ 不支持批量导出多个 QQ 号——每个运行实例只绑定一个 qzonetoken❌ 不解析或导出“私密说说”——即使你本人能看到只要页面 HTML 中没有渲染脚本就不会抓取❌ 不处理“说说删除后残留的评论”——删除说说时腾讯会同步清除关联评论脚本无法找回❌ 不提供 GUI 界面——作者在 issue #127 中明确表示“图形界面会吸引非目标用户增加维护负担偏离‘极简工具’定位。”这种克制让它避开了法律与伦理的灰色地带。国内某爬虫教程网站曾收录类似脚本但因未声明“仅限本人数据”被用户用于爬取公司员工公开资料最终引发纠纷。GetQzonehistory 的干净正在于此。5.2 与“QQ空间归档”官方服务的本质差异腾讯确实提供了“QQ空间归档”功能在空间设置里但两者有根本不同维度QQ空间归档官方GetQzonehistory开源数据格式加密 ZIP 包内部为 XML无图片开放 Excel JPG可直接编辑时间范围仅支持 2018 年后数据理论上支持 2005 年至今取决于页面可见性图片处理图片转为低分辨率缩略图且无原始尺寸下载原始尺寸高清图保留 EXIF 信息评论导出仅导出评论文字无时间、用户昵称导出完整评论树含时间、昵称、头像 URL后续使用归档包需用腾讯专用阅读器打开Excel 可导入数据库、做 BI 分析、生成网页我对比过同一用户 2015 年的 100 条说说官方归档包解压后图片平均大小 42KBGetQzonehistory 下载的同源图片平均 1.2MB。对于想做数字遗产保存的人这个差异决定了一切。5.3 未来演进的可能性与现实约束项目作者在 2024 年 3 月的更新日志中提到“v3.0 将探索离线缓存机制减少重复请求。” 这意味着什么当前版本每次运行都重新抓取全部数据而新版本可能引入本地 SQLite 数据库记录已下载的说说 ID下次运行时自动跳过。但这带来新挑战如何判断说说是否被编辑QQ 空间允许用户修改说说文字但不改变 URL。解决方案可能是哈希比对——对每条说说内容生成 SHA256存入数据库变化时触发更新。另一个方向是“增量同步”。与其每次全量导出不如做成每日定时任务只抓取新增说说。这需要脚本具备状态管理能力而当前设计是无状态的。作者坦言“增加状态管理会让脚本从‘工具’变成‘服务’这违背初心。” 所以它大概率会保持现状——一个双击即用、导出即走、不驻留、不联网、不上传的纯粹工具。最后分享一个真实案例一位退休教师用 GetQzonehistory 导出了 2006-2016 年的 3821 条说说打印成册送给每位教过的学生。书名就叫《时光备忘录》扉页写着“数据会丢失但记忆值得被郑重对待。” 这或许就是这类小工具存在的全部意义——不宏大不炫技只是在数字洪流中为你稳稳托住那一小片属于自己的时光。
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

电商直播运营方案从0到1:GMV拆解、排品节奏与数据复盘实战 2026/9/19 20:49:43

电商直播运营方案从0到1:GMV拆解、排品节奏与数据复盘实战

简介:一份2020年SKG携手娜扎与薇娅开展“娜小古”淘宝直播的完整策划PPT,面向电商直播运营、品牌营销策划及内容电商从业者。方案以颈椎按摩仪新品推广为核心,结合都市低头族颈椎健康焦虑,完整呈现从行业报告、品牌背书到直播落地…

阅读更多 →
Taro 流程测试体系全解析:从 @tarojs/webpack5-runner 迁移而来的端到端构建测试 2026/9/19 20:49:43

Taro 流程测试体系全解析:从 @tarojs/webpack5-runner 迁移而来的端到端构建测试

Taro 流程测试体系全解析:从 tarojs/webpack5-runner 迁移而来的端到端构建测试 【免费下载链接】taro 开放式跨端跨框架解决方案,支持使用 React/Vue 等框架来开发微信/京东/百度/支付宝/字节跳动/ QQ 小程序/H5/React Native 等应用。 项目地址: htt…

阅读更多 →
Leaflet 自定义 Marker 图标完全指南:Icon 选项、锚点对齐与图标类继承实战 2026/9/19 20:49:43

Leaflet 自定义 Marker 图标完全指南:Icon 选项、锚点对齐与图标类继承实战

Leaflet 自定义 Marker 图标完全指南:Icon 选项、锚点对齐与图标类继承实战 【免费下载链接】Leaflet 🍃 JavaScript library for mobile-friendly interactive maps 🇺🇦 项目地址: https://gitcode.com/gh_mirrors/le/Leaflet…

阅读更多 →
自动驾驶3D多目标跟踪:概率滤波与多模态融合实战 2026/9/19 20:49:43

自动驾驶3D多目标跟踪:概率滤波与多模态融合实战

1. 为什么概率性3D多模态多目标跟踪值得单独拎出来讲自动驾驶的感知栈里,目标跟踪经常被当成一个"下游小模块"——检测出框,配个ID,卡尔曼滤波平滑一下,好像就完事了。但真上路跑过数据的人都知道,跟踪才是那…

阅读更多 →
河道治理施工组织设计:碾压参数与设备配置实战解析 2026/9/19 20:49:43

河道治理施工组织设计:碾压参数与设备配置实战解析

简介:面向河道治理与水利工程施工的完整方案型文档,以蔷薇河治理工程某施工标段为实例,系统说明施工组织设计从编制依据、工程概况到施工方法与技术组织措施的编制思路。方案重点交代土方开挖、基坑支护、砌体、主体建筑物、金属结构与机电设…

阅读更多 →
2026大模型选型指南:权威Benchmark榜单拆解与业务落地方法论 2026/9/19 20:46:42

2026大模型选型指南:权威Benchmark榜单拆解与业务落地方法论

1. 选型这件事,为什么在2026年变得格外棘手2026年做AI应用,选大模型这件事跟两年前完全不是一个难度级别。2024年的时候,大家手里能打的牌就那么几张,闭眼选一个头部模型基本不会出大错。但到了2026年,情况彻底变了——…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞