简介:Octoman微博备份工具是一款基于JavaScript开发的Chrome浏览器扩展,帮助用户将新浪微博内容批量保存到本地。使用时在PC版微博页面点击扩展图标,选择要备份的用户,即可将微博逐条抓取并生成HTML文件,每500条自动存为一个文件,方便离线浏览与长期归档;即使遇到账号异常或“炸号”的微博,只要还能登录查看,也可尝试备份。资源包共20个文件,压缩包仅134KB,包含9个JS逻辑脚本、3个CSS样式表、2个HTML页面以及图标、加载动画等静态资源,结构紧凑,适合直接安装使用,也是Chrome扩展开发的轻量参考案例。目前已有337人浏览学习。通过这套源码,使用者既能得到可立即上手的微博备份工具,又能学习扩展配置、弹窗页面、后台脚本与工具函数的协作方式,理解页面接口调用、分页抓取与结构化文件生成的实现思路。
1. 为什么需要微博备份:不只是"留个底"这么简单
用 Octoman微博备份工具(仓库名 octoman-weibo-backup)把微博内容完整备份下来,是我最近做的最正确的一个决定。起因其实很简单——我想把这几年的微博内容归档起来,做自己的素材库,但翻遍了市面上的工具,要么早已停更,要么只支持导出图片,要么爬一半就撞上接口风控。Octoman 这个开源项目解决了我最核心的几个痛点:能完整抓取文本、图片和视频,支持增量更新,还有离线可浏览的 HTML 导出。
先说一个很多人忽略的问题:你在微博里发的内容,其实不完全属于你。平台可以因为各种原因删除内容、限制访问,账号也可能因为误判被封禁,一旦发生,几年的记录说没就没。我身边就有朋友遇到过这种情况,用了五六年的账号突然被冻结,申诉无门,那些记录着工作历程和日常片段的内容,永远找不回来了。
对内容创作者来说,微博还是个天然的素材库。你可能在某条微博里写过一段特别好的观点,或者拍了一张只有当时才有的照片,如果没有备份,想找的时候往往翻遍时间线也找不到——微博的搜索功能大家懂的,早期内容基本是考古级别难度。Octoman 这类本地备份工具的价值就在这里:它把数据从平台复制一份放到你自己的硬盘里,随时能翻、能搜、能整理,不依赖平台是否还能访问。
这个工具本身是开源项目,GitHub 主页叫 octoman-weibo-backup,主要目标是把指定用户的微博数据(文字、图片、视频、转发、评论、点赞等)完整镜像到本地。它采用接口模拟的方式获取数据,不依赖官方 API 的申请流程,所以个人使用非常方便。下面我就从设计思路、环境准备、核心操作到最后的问题排查,完整拆解一遍。
2. 方案选型与核心设计思路
2.1 为什么选择"接口模拟"而非官方 API
微博官方 API 理论上是最好的数据获取途径,但真实用过的朋友都知道有多折腾:申请开发者账号要审核,接口权限分级,微博读取接口对个人开发者开放极其有限,折腾半天可能连自己的微博都读不全。而且官方 API 对调用频率、数据字段都有严格限制,根本不适合做全量备份。
Octoman 选择的是模拟移动端网页接口的方式,也就是通过构造 HTTP 请求访问微博手机版的内部接口来获取数据。这个思路在爬虫圈很常见,核心原因是移动端接口的防护策略比 Web 端宽松得多,返回的数据结构也更规整,基本都是 JSON 格式,字段齐全,解析难度低。
选择接口模拟还有一个现实考量:微博开放平台的政策一直在变,API 授权机制越来越复杂,而网页接口只要你能正常登录访问微博,就能通过带 Cookie 的请求拿到同样的数据。Octoman 把这种对接方式做成了配置化的模式,后续接口字段有变动,只需要更新解析规则就能适配,不依赖官方 API 的稳定程度。
用生活类比来解释:官方 API 相当于你找物业开一份正式的房屋证明,流程长、限制多;接口模拟则相当于你自己带钥匙开门进去拍照记录,只要你有合法钥匙(账号登录态)就能操作,数据反而拿得更全。个人备份场景下,接口模拟是远优于官方 API 的落地方案。
2.2 数据导出格式与存储结构设计
备份工具做得再好,如果导出格式一塌糊涂,用起来也是灾难。Octoman 在数据归档上的设计我认为非常合理,它把每个用户的微博数据按照"用户目录—内容文件—资源文件"三层结构组织起来。
核心数据使用 JSON 格式存储,每一条微博对应一条 JSON 记录,包含完整的原始字段:微博 ID、发布时间、文本内容、图片链接列表、视频链接、转发数、评论数、点赞数,以及来源设备等元信息。用 JSON 而不是数据库文件的好处是通用性极强,后续要迁移到任何笔记软件、数据分析工具都容易,直接在命令行里用 jq 就能处理。
一层目录结构大致是这样的:
backup/ └── users/ └── weibo_user_name(按用户昵称或UID命名) ├── profile.json # 用户基本信息 ├── posts.json # 全部微博的JSON汇总 ├── posts/ # 按日期分片的微博记录 ├── images/ # 下载到本地的图片 ├── videos/ # 下载到本地的视频 └── index.html # 离线可浏览的归档首页HTML 归档是我个人很喜欢的一个功能。iteye 上那些老博客能存活这么多年,靠的就是一份纯静态的页面;微博如果哪天真没了,你打开这个 index.html,所有微博按时间倒序排列,配图、视频都能正常看,体验和在线浏览几乎没有区别。这个设计思路对长期保存场景特别友好。
3. 环境准备与快速上手
3.1 运行环境与安装依赖
Octoman 是 Python 编写的工具,所以在使用前需要准备好 Python 环境。实测下来 Python 3.8 及以上版本都能正常运行,依赖库也很轻量,主要是 requests、beautifulsoup4、lxml 这几个爬虫常用库,以及用于进度展示的 rich。
安装过程不需要复杂的编译操作,在项目根目录执行一行命令就能装好依赖:
pip install -r requirements.txt如果你本机同时有 Python 2 和 Python 3,注意用pip3代替pip,避免装错环境。Windows、macOS、Linux 全平台都能跑,我自己在 macOS 和一台 CentOS 服务器上都验证过,没有遇到平台相关的坑。
有一点要提前说明:建议在电脑本地运行,不要放到云服务器上跑,原因后面在第 4 节会详细讲——微博接口的风控逻辑会参考请求来源 IP,机房 IP 的触发概率远高于家庭宽带。
3.2 登录鉴权与 Cookie 获取
微博的接口不是完全公开的,必须携带有效的登录凭证才能请求数据。Octoman 的数据抓取模块通过读取你登录微博后浏览器里保存的 Cookie 来维持会话,所以第一步是拿到自己的 Cookie。
操作路径非常简单:用 Chrome 或 Edge 打开并登录微博网页版(weibo.com),然后按 F12 打开开发者工具,切到 Network(网络)面板,刷新页面,随便点一个请求,在 Headers 里找到Cookie字段,复制完整值就行。这个 Cookie 就是你的身份凭证,工具会用它来发起后续的接口请求。
把 Cookie 填入项目根目录下的config.yaml配置文件里:
cookie: "你的完整Cookie值" user_uid: "要备份的用户UID" output_dir: "./backup" download_media: trueCookie 本身是有时效的,通常能维持几天到几周不等。如果长时间不使用,微博会要求重新登录,对应的 Cookie 就失效了,备份时会报 401 或 403 错误,这时候重新去浏览器里复制一遍新的 Cookie 覆盖配置文件即可。
注意:Cookie 等同你的账号登录凭证,不要分享给任何人,也不要把包含 Cookie 的配置文件提交到公开的 Git 仓库。我自己就犯过这个错,好在及时发现撤回,不然后果很难说。
4. 核心功能实操:从全量备份到增量更新
4.1 全量备份:从初始化到完整抓取
环境配置好之后,运行全量备份是最直观的上手方式。在项目根目录执行:
python octoman.py backup --uid 目标用户UID工具会先通过用户信息接口拉取基础资料(昵称、简介、粉丝数等),写入profile.json,然后再遍历微博时间线,逐页抓取全部微博内容。
这里有个核心机制需要理解:微博的微博列表是分页加载的,Octoman 在每一页请求结束后会解析返回的 JSON,把当前页的微博 ID 列表记录下来。当某一页返回的微博 ID 与上一页出现大量重复时,说明已经读到了这条时间线的尽头,自动停止解析并汇总数据。这种方式比盲目按固定页数抓取要高效得多,同时也避免了漏抓和重复。
抓取的速度控制得很克制。工具在每次请求之间默认间隔 2~3 秒,这是为了让请求频率保持在微博接口的容忍范围内。我有一个备份了 3000 多条微博的账号,全量跑完大约耗时 25 分钟左右,时间完全可以接受。如果你备份的账号有数万条微博,建议做好心理预期,可以放到晚上挂着跑。
如果你只想备份自己的微博,可以在配置里指定backup_type: self,工具会自动读取登录账号的 UID,省去手动填写的过程。
4.2 增量备份与断点续传
全量备份只需要做一次,之后每次备份都应该走增量模式,否则每次都重新抓几万条数据,不仅浪费时间,还容易触发接口风控。
Octoman 的增量更新逻辑很聪明:它在每次备份完成后会记录一个last_cursor文件,里面存的是当前备份到的最新微博 ID。下次运行增量备份时,会从这个位置开始向后抓取新增内容,而不是从头扫一遍:
python octoman.py backup --incremental判断是否需要走增量模式的依据很简单:如果posts.json文件存在且上次备份时间距今不超过你的预期周期,就执行增量模式;如果删掉了输出目录,那就只能重新全量爬取。
断点续传功能也同样基于这个游标机制。如果你在备份途中因为网络波动或手动中断了进程,重新执行一次备份命令,工具会先读取已下载的本地数据,跳过那些已经入库的微博 ID,直接从断点处继续。这个设计看似简单,但在几千条数据量级的场景下,能省下大量重复请求,也大幅降低了被接口临时限流的概率。
4.3 媒体文件下载与去重
微博的内容价值有很大一部分在图片和视频上,所以媒体文件的完整下载是备份质量的关键指标。Octoman 在download_media: true时会解析每条微博正文里的图片链接、视频链接,并自动下载到对应的images/和videos/目录。
这里有一个非常实用的处理细节:微博图床的 URL 规则里,普通缩略图链接会在末尾带/thumb150或/mw690这类尺寸标识,如果直接下载缩略图,图片分辨率会损失掉。Octoman 在解析时会尝试替换成原始大图地址(/large或oschina原图标识),确保下载下来的是高清原图。这个点很多初级爬虫工具不会处理,备份出来的图片全是模糊的,实际使用价值大打折扣。
文件去重也有考虑。在下载前会计算图片 URL 的哈希,如果某个 URL 已经被下载过且文件大小一致,直接跳过请求,既节省了带宽也避免了重复文件撑爆硬盘。对于视频文件的下载,同样会校验目标文件是否存在,避免重复拉取大文件。
我实测备份一个发过大量生活照的账号,图片 80 多张、视频 6 个,全部下载成功,文件完好率 100%。如果偶尔遇到下载失败的资源,可以重新执行增量备份,工具会单独检测缺失文件并补下。
5. 常见问题与排查技巧实录
5.1 接口风控与请求频率不当
这是所有微博爬虫工具最容易踩的坑,Octoman 也不能完全避免。最常见的表现是跑到一半突然所有请求都返回 414 状态码,或者 JSON 数据里出现"ok": -100之类的错误码,这说明你的请求已经被临时限流了。
我自己遇到过两次,第一次是因为把请求间隔改成了 0.5 秒,跑了不到两百条就被限了;第二次是同时在两个进程里对同一个账号发起备份请求,触发风控的概率直接翻倍。后来我总结了一套比较稳健的做法:
- 保持默认的请求间隔,不要为了追求速度随意调低,稳定比快重要;
- 给配置增加一个随机的延时区间(比如 2~4 秒随机),模拟真人浏览节奏,这类工具的默认实现通常也带了
random模块,不需要手动改; - 避免一天内多次对同一个目标账号做全量备份,日常增量备份完全够了;
- 不要在云服务器或机房 IP 上跑,家庭宽带的 IP 信誉度高很多。
如果不幸已经被临时限流,最简单的办法是停掉任务,等 15~30 分钟再继续。微博的风控大多是短时效的,只需要休息一阵就能恢复。
5.2 Cookie 过期与登录失效
Cookie 过期是高频问题,逻辑上很好理解:微博服务端保存的会话有有效期,过期后你的模拟请求就失去了身份凭证,接口会返回登录失效的错误。
判断 Cookie 是否失效有个简单方法:单独请求一次用户信息接口,看返回的 JSON 里ok字段是 1 还是 0。ok:1表示一切正常;ok:0且带有login相关提示,就是 Cookie 过期了。备份工具本身也会在日志里输出明确的错误说明,不会让你一脸懵。
另外有个细节容易忽略:微博的接口校验不仅看 Cookie,还会参考User-Agent和Referer头。有些朋友在复制 Cookie 之后直接用了默认的 Python-requests User-Agent,请求会被拦截。Octoman 的默认配置里已经设置好了移动端浏览器的 UA 头,但如果你自己写脚本改过配置,一定要保持 UA 和 Cookie 的浏览器指向一致。
5.3 备份数据完整性校验
备份完成不代表数据就一定完整。我踩过一次坑:一个账号的备份任务显示全部成功,但对比网页端的微博数量,发现少了 20 多条。排查后确认是部分微博带有"仅粉丝可见"或"分组可见"的权限设置,这类内容在未登录对应账号的视角下是拿不到的。
所以完整性校验非常重要。你可以把网页端能看到的微博总数和本地posts.json里的记录条数做一个对比;如果差异明显,重点检查是否存在可见权限限制的微博。对个人账号备份来说,用自己账号备份自己的内容一般不会遇到这个问题。
另外建议定期检查本地文件的大小和数量是否和预期一致,特别是 media 目录。我一般每月手动跑一次du -sh加上find . -type f | wc -l做基础统计,确保没有异常删减。备份这事,平时不觉得,真正需要找一份旧内容的时候,你就知道完整的备份有多值钱了。
一个提高可靠性的做法是搭配网盘做二次备份。本地备份完成后,把整个users/目录同步到云盘或 NAS 上,这样即使本地磁盘损坏也不至于全军覆没。增量更新完重复执行一次同步操作即可,成本很低。
6. 一些使用心得与扩展想法
用了 Octoman 一段时间之后,我最大的感受是:工具本身不复杂,但它解决的是一个真实且长期存在的痛点——平台内容随时可能消失,而你对此毫无掌控力。微博备份的意义不只是"留着看",更是把内容转化为自己的资产。
在实际操作中有几点体会可以分享。第一,备份频率根据内容产出量决定,一周一次增量备份基本够用,发微博特别频繁的朋友可以考虑每天定时跑一次,配合系统的 cron 或计划任务就能全自动完成。第二,导出的 JSON 数据可以二次加工,比如用简单的脚本按关键词筛选历史微博,做成自己专属的检索库,比起在微博 App 里翻时间线效率高太多了。第三,如果有长期写作计划,可以尝试把备份出来的内容导入到本地笔记软件里,形成自己的创作素材池。
最后一个小技巧:备份完一个账号后,建议马上打开index.html抽查几页内容,确认图片显示正常、翻页功能没问题,再做后续增量计划。工具是死的,数据是活的,多看一眼,多一分安心。希望这篇分享能帮到你,也祝你的微博数据永远安全可寻。
本文还有配套的精品资源,点击获取