Post

桃子圈数据备份与微博镜像站搭建

久违的“技术”博客。前段时间桃子圈恢复了运营,总算是又能见到日思夜想的管人里垢了。喜悦之余,考虑到这个网站屡次出现服务器到期、无法访问的情况,还是决定把它的数据备份下来,毕竟自己动手丰衣足食,靠别人不如靠自己。

最近Vibe Coding的概念炒得火热,不如借此机会做一个桃子圈的爬虫程序,算是对新技术的粗浅尝试。

什么是桃子圈?

“桃子圈”(peachring.com)是一个第三方的微博数据抓取与备份网站。它的主要功能是将特定微博博主的内容(包括图文、视频和动态)进行批量归档和快照保存,常被用于查看博主已删除、仅半年可见或隐藏的动态。

对于管人观众,考虑到大部分管人有出道后清空、注销前世账号的习惯,导致粉丝难以获取中之人早期的动态内容。因此,桃子圈的微博快照成为研究中之人信息的重要资料。至于为什么不看皮套反而去关注皮下,此处需要@四禧丸子。

为什么要对桃子圈进行备份?

由于该网站属于第三方服务,且数据维护的成本较高,该平台的数据更新自25年起已全面停止,网站在过去几年中也屡次出现无法访问和彻底停运的情况。作为一位赛博考古爱好者,担心未来可能再次出现无法访问的情况,把数据掌握到自己手里还是有必要的。

解决方案

我采用的Coding方案是VS Code的Codex插件 + API中转站,使用GPT-5.4进行代码生成,算是比较节约成本的一个选择。20美刀的Plus会员对我来说还是有些昂贵,之前也有申请GitHub Student的Copilot套餐,不过近几个月Copilot可用的模型频繁受限,截止到我写这篇文章只让用GPT-5.2了,属于是到了完全不可用的地步。于是只好自掏腰包找中转站买token了,不过能花小钱办大事还是值得的。

编程细节没什么好说的,在后AI时代,编程的门槛已经是大大降低了。只要能描述清楚需求和大致的工作流程,AI便能八九不离十地实现90%的功能,剩下10%也不需要自己动手,只要继续输几轮prompt微调即可。之前就听说有初中辍学的管人用GPT搭出了个人网站,不过初中辍学能否独立完成编程还是比较存疑的。

实现思路

桃子圈备份的实现可分为两步:

一是从网站上爬取微博,并在本地结构化存储数据。具体来说,以微博用户的uid作为程序输入,让爬虫访问对应的网页https://peachring.com/u/{uid}逐条爬取微博,将获取到的文本和图片数据结构化存到本地。微博文本可以设置一个CSV文件集中管理,图片则使用用户-微博-图片的三层索引结构存储,最后还需存储微博昵称、关注粉丝数、注册时间等用户信息,同样是整理到一个CSV文件内。

二是数据的可视化,读取本地数据,并用微博站点的风格把微博展示出来。可视化网页采用主页-用户子页的两层结构,主页展示所有已抓取用户的资料卡片,点击进入用户子页后可以看到该用户发布的所有微博。至于模仿微博的外观布局就是纯体力劳动了,这种依葫芦画瓢的工作是AI的强项,我要做的工作只是把微博的网页截图一张张发给AI。

完整的项目代码参见PeachEater,该项目从代码到README均由AI自动生成,只能说AI无论是编程还是写作水平都比我高到不知道哪里去了。

如果只想在本地备份数据,以上两步已完成了全部的工作。但所谓做好事做到底,既然前端都写好了,不如直接做个GitHub Page放到网上。有个问题是微博图片占用的空间太多了,直接传到GitHub上无疑是要超出限额的,之前用的博客图床也只适合存储少量的图片,无法用于大批量的图片备份,因此还需要找一个图片托管方案。

我采用的方案是在Cloudflare R2上托管图片,Cloudflare R2的Free Plan有每月10GB的免费存储空间,对白嫖用户相当友好。Cloudflare R2的配置流程详见我的另一篇博客使用Cloudflare R2搭建个人图床,这里不再赘述。

这样一来,网页的部署就分成了两部分:一是在GitHub Page上托管静态网页,二是在Cloudflare R2托管图片资源,在静态网页中引用Cloudflare R2的图片外链将两部分串联在一起。

小结

本项目于5月20日完成,耗时一个下午,花费成本10元,用于购买GPT-5.4的token。记得两年前搭建个人博客足足花了两天,还是照着别人提炼好的教程一步步来的。如今有了AI工具的加成,只需敲几下键盘,在短短几小时内便能从无到有搭建一个功能完备的网站,Vibe Coding带来的效率跃升可见一斑。

最近陆续也出现了一些对Vibe Coding的质疑,“你连代码都看不懂,AI写出来的东西把你银行卡密码卖了怎么办?”这对专业编程人员来说确实是个问题,毕竟商业化程序不仅要追求效率,还要考虑安全合规;不过对于我这种草台编程爱好者,只要结果过得去就谢天谢地了,还要求什么自行车。