用爬虫画出
开往的朋友圈
开往的随机跳转机制告诉你「这里有很多博客」,但不告诉你它们之间是否已经有了真实的关系。现在有了答案——它们有,而且比我预想的更紧密。
先说清楚一件事:两张完全不同的网络
开往的随机跳转是这样工作的:每个成员站放一个开往按钮,点击后跳转到 travellings.cn/go.html,go.html 调用 /random 接口,从全部成员里随机抽一个返回。这个过程是纯随机的,和你从哪个站点点进来完全无关,也不存在「邻居」概念——每次跳转都是面向全体成员的均匀抽签。
<a href> 链接,过滤出目标域名在开往成员列表里的——这是博主手动挂上去的友链。开往按钮本身指向 travellings.cn,在过滤规则里被明确排除,不会产生任何边。 所以这个图谱反映的不是开往的流量分发关系,而是「以开往成员为样本,博主之间自发形成的友链网络」。两张网络正交,互不干扰。所有数据是 2026-06-06 这一天的一次性快照,博主的友链页随时可能变化,图谱反映的是那个瞬间的状态。

发现了什么
入度排行 TOP 5
| # | 博主 | 入度 | PageRank |
|---|---|---|---|
| 1 | 张洪 Heo | 187.06 | |
| 2 | 安知鱼 | 98.64 | |
| 3 | 清羽飞扬 | — | |
| 4 | 杜老师说 | — | |
| 5 | 风记星辰 | — |
基础设施:Cloudflare 是隐形基础
建站平台分布
社交账号:GitHub 是身份证
爬取了每个成员站的社交账号链接,结果里藏着这个群体的消费习惯侧写:
GitHub 847 站,几乎等于全员覆盖。B 站以 280 站排第二,是微博的 3.7 倍——这批人的内容消费习惯和「普通互联网用户」差异显著。小红书只有 17 站,差距悬殊。
活跃度:38% 的「僵尸站」
RSS 活跃度分级(有 feed 的 944 站)
局限性
数据是 2026-06-06 的一次性快照,博客圈变化很快,几个月后就会有偏差。只爬了首页和友链页,没有全站递归,部分友链可能散落在文章、关于页等位置,边的数量会被低估。约 260 个站点在爬取时无法访问(超时、DNS 错误等),这些站点的关系数据缺失。平台识别依赖 HTML 特征,169 个站点标记为 Unknown,高度定制的主题会让特征提取失效。
技术实现
爬虫用 Python asyncio + aiohttp,并发 50,对 1500+ 个站点做双层爬取:先爬首页,再通过关键词匹配(友链、links、blogroll 等)定位友链页,最多跟进三个候选页面。只爬首页会漏掉大量真实关系,因为大多数博主的友链集中在专门的友链页而不是首页。
链接提取用 BeautifulSoup,过滤逻辑简单:目标域名在开往成员集合里就保留,否则丢弃。数据存 SQLite,支持断点续跑。图计算用 NetworkX(PageRank、Louvain 社区检测),可视化用 D3.js v7 的 force-directed graph,纯静态部署在 GitHub Pages。
