
简介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 与上一页出现大量重复时说明已经读到了这条时间线的尽头自动停止解析并汇总数据。这种方式比盲目按固定页数抓取要高效得多同时也避免了漏抓和重复。抓取的速度控制得很克制。工具在每次请求之间默认间隔 23 秒这是为了让请求频率保持在微博接口的容忍范围内。我有一个备份了 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 秒跑了不到两百条就被限了第二次是同时在两个进程里对同一个账号发起备份请求触发风控的概率直接翻倍。后来我总结了一套比较稳健的做法保持默认的请求间隔不要为了追求速度随意调低稳定比快重要给配置增加一个随机的延时区间比如 24 秒随机模拟真人浏览节奏这类工具的默认实现通常也带了random模块不需要手动改避免一天内多次对同一个目标账号做全量备份日常增量备份完全够了不要在云服务器或机房 IP 上跑家庭宽带的 IP 信誉度高很多。如果不幸已经被临时限流最简单的办法是停掉任务等 1530 分钟再继续。微博的风控大多是短时效的只需要休息一阵就能恢复。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抽查几页内容确认图片显示正常、翻页功能没问题再做后续增量计划。工具是死的数据是活的多看一眼多一分安心。希望这篇分享能帮到你也祝你的微博数据永远安全可寻。本文还有配套的精品资源点击获取