knowhow_v1.md 10.2 KB

微博热搜多榜爬取与数据整合 — Hunter 调研报告

目标 Agent: weibo-scraper
技能领域: 微博热搜多榜爬取与数据整合
调研时间: 2026-04-13
数据来源: 一手 API 实测 + 第三方聚合接口验证


1. 数据源清单

1.1 官方接口(一手数据源)

榜单 接口地址 认证要求 实测状态 备注
热搜总榜 https://weibo.com/ajax/side/hotSearch 无需登录 ✅ 可用 返回 51 条实时热搜 + 1 条置顶话题
文娱榜 https://weibo.com/ajax/statuses/entertainment 需登录 Cookie ⚠️ 需登录 空 Cookie 返回 ok: -100
社会榜 https://weibo.com/ajax/statuses/society 需登录 Cookie ⚠️ 需登录 同上
生活榜 https://weibo.com/ajax/statuses/life 需登录 Cookie ⚠️ 需登录 同上
体育榜 https://weibo.com/ajax/statuses/sport 需登录 Cookie ⚠️ 需登录 扩展榜单
科技榜 https://weibo.com/ajax/statuses/tech 需登录 Cookie ⚠️ 需登录 扩展榜单
要闻榜 https://weibo.com/ajax/statuses/news 需登录 Cookie ⚠️ 需登录 扩展榜单

1.2 第三方聚合/中转 API(实测可用)

服务商 接口地址 认证 实测状态 特点
60s 读世界 https://60s.viki.moe/v2/weibo 无需 Key ✅ 可用 返回 title/hot_value/link
XXAPI https://v2.xxapi.cn/api/weibohot 无需 Key ✅ 可用 返回 index/title/hot/url
酷酷 API https://api.zxki.cn/api/jhrs?type=weibo 无需 Key ✅ 可用 聚合多平台热榜
AA1.cn https://api.aa1.cn/api/weibo-rs 无需 Key ✅ 可用 返回排名+热度+双端 URL
天聚数行 https://apis.tianapi.com/weibohot/index?key={apiKey} 需 API Key 未实测 付费/会员制,约 30 分钟更新
觅知 API https://api.98dou.cn/api/hotlist?type=weibo 无需 Key ❌ 403 当前被拦截,不稳定

1.3 旧版网页入口(已受限)

入口 URL 示例 状态 说明
s.weibo.com 前端页 https://s.weibo.com/top/summary?cate=realtimehot ❌ 302 强制跳转 passport.weibo.com visitor 验证
新版热榜页 https://weibo.com/hot/search ❌ 302 同样被 visitor 机制拦截
m.weibo.cn 移动端 https://m.weibo.cn/api/container/... ❌ 432/302 移动端有独立风控,需特定 Cookie/Token

2. 榜单结构分析

2.1 热搜总榜 (/ajax/side/hotSearch)

返回结构:

{
  "ok": 1,
  "data": {
    "hotgov": { ... },
    "hotgovs": [ ... ],
    "realtime": [ { ... }, ... ]
  },
  "logs": [],
  "topLogs": []
}

realtime 单条字段说明:

字段 类型 含义
word string 热搜词条(核心字段)
num int 热度数值(如 1172178)
realpos int 实际排名(1~N)
rank int 内部排序偏移(通常为 realpos - 1)
label_name string 标签:热、新、爆、沸、荐 或空
flag int 标签类型编码:0=无, 1=新, 2=热
note string 与 word 通常一致
word_scheme string 带 # 的话题格式,如 #话题#
topic_flag int 是否话题:1=话题,0=普通词
icon / icon_desc string 图标 URL 和描述
icon_desc_color string 图标颜色 HEX

hotgov 置顶字段说明:

  • 表示官方置顶内容。字段比 realtime 多 is_gov、stime、name、url 等。

2.2 其他垂直榜单 (/ajax/statuses/{category})

通过 HEAD 探测确认以下端点均真实存在:

entertainment  → 文娱榜
society        → 社会榜
life           → 生活榜
sport          → 体育榜
tech           → 科技榜
news           → 要闻榜

技术限制:

  • 空 Cookie 访问返回 {"ok": -100, "url": "https://weibo.com/login.php?url=..."}
  • 需要携带有效的 SUB、XSRF-TOKEN 等 Cookie
  • Header 需包含 Referer: https://weibo.com/ 和 X-Requested-With: XMLHttpRequest

推断的返回结构:

  • 大概率与 hotSearch 类似,或采用 band_list / group 结构。
  • 字段映射可复用 word / num / realpos / label_name 等统一 schema。

2.3 URL 结构差异总结

层级 热搜总榜 垂直榜单(文娱/生活/社会等)
路径前缀 weibo.com/ajax/side/ weibo.com/ajax/statuses/
区分方式 固定路径 hotSearch 动态路径 {category}
认证强度 低(公开接口) 高(需登录 Cookie)
服务模块 侧边栏热词服务 信息流/话题带服务

3. 爬取方法论

3.1 零登录方案(快速启动)

对于热搜总榜,直接 GET 请求即可:

import requests

url = "https://weibo.com/ajax/side/hotSearch"
headers = {
    "User-Agent": "Mozilla/5.0 ...",
    "Accept": "application/json, text/plain, */*",
    "Referer": "https://weibo.com/",
    "X-Requested-With": "XMLHttpRequest",
}
resp = requests.get(url, headers=headers, timeout=10)
data = resp.json()["data"]["realtime"]

3.2 多榜爬取方案(需登录态)

对于文娱榜/社会榜/生活榜,必须维护 Cookie Session:

import requests
import time

session = requests.Session()
session.headers.update({
    "User-Agent": "...",
    "Referer": "https://weibo.com/",
    "X-Requested-With": "XMLHttpRequest",
})
session.cookies.set("SUB", "_2Ak...")
session.cookies.set("XSRF-TOKEN", "...")

boards = ["entertainment", "society", "life", "sport", "tech"]
for board in boards:
    url = f"https://weibo.com/ajax/statuses/{board}"
    resp = session.get(url, timeout=10)
    # 解析并存储...
    time.sleep(2)  # 频率控制

3.3 备用/兜底方案(第三方 API)

当官方接口受限时,可调用第三方免费 API 降级:

  • 60s.viki.moe/v2/weibo
  • v2.xxapi.cn/api/weibohot
  • api.aa1.cn/api/weibo-rs

优缺点:

  • 优点:无需维护 Cookie,适合小型项目。
  • 缺点:字段不完整,更新频率依赖第三方。

4. 反爬策略

4.1 官方接口风控机制(实测)

接口 风控强度 触发条件 应对策略
/ajax/side/hotSearch 低-中 缺少 User-Agent 或高频 IP 补全 Headers,单 IP 间隔 ≥30 秒
/ajax/statuses/* 高 Cookie 失效、Referer 缺失 维护 Cookie 池,配合代理轮换
s.weibo.com/* 极高 全部请求强制 visitor 校验(实测 302) 不建议直接爬取 HTML
m.weibo.cn/* 高 缺少 M 端 Cookie/Token(实测 432) 需模拟移动端登录

4.2 推荐配置

Headers 最小可用集:

{
  "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 ...",
  "Accept": "application/json, text/plain, */*",
  "Accept-Language": "zh-CN,zh;q=0.9",
  "Referer": "https://weibo.com/",
  "X-Requested-With": "XMLHttpRequest",
  "Connection": "keep-alive"
}

频率控制:

  • 官方接口:≥30 秒/次,单 IP 日调用量建议
  • 第三方 API:≥2 秒/次。

Cookie 维护(针对需登录榜单):

  1. 手动导出浏览器 SUB 和 XSRF-TOKEN。
  2. 使用 Playwright/Selenium 定期扫码登录,自动提取新 Cookie。
  3. 准备 3-5 个账号轮换。

5. 数据清洗规范

5.1 输入源差异映射

标准字段 官方 hotSearch 60s API XXAPI AA1.cn
rank realpos 索引+1 index index
word word title title title
heat num hot_value hot hot
label label_name - - -
url word_scheme link url url
is_topic topic_flag 推断 推断 推断

5.2 清洗规则

  1. 字段标准化

    • 所有字段名统一为 snake_case
    • 热度值统一为纯数字(去除 万/万+ 后缀)
    • 空值用 '' 或 0 填充
  2. Unicode 解码

    • API 返回的 JSON 可能含 Unicode 转义,入库前必须解码为 UTF-8
  3. 去重规则

    • 联合键:word + board_type + crawl_time(按小时截断)
  4. 置顶处理

    • hotgov 标记 rank=0,board_type=hotgov

5.3 输出格式标准

JSON 单条示例:

{
  "rank": 1,
  "word": "员工中了1500万彩票后直接离职",
  "heat": 1172178,
  "label": "热",
  "board_type": "realtimehot",
  "is_topic": 1,
  "note": "员工中了1500万彩票后直接离职",
  "word_scheme": "#员工中了1500万彩票后直接离职#",
  "source_url": "https://weibo.com/ajax/side/hotSearch",
  "crawl_time": "2026-04-13T10:32:00Z"
}

必填字段: rank, word, heat, board_type, source_url, crawl_time


6. 合规要求

  1. 遵守 robots.txt

    • weibo.com/robots.txt 限制了部分路径,公开 API 端点未明确禁止。
  2. 频率与负载控制

    • 请求间隔 ≥2 秒(建议 ≥30 秒),避免对服务器造成过度负载。
  3. 数据溯源

    • 每条记录必须保留 source_url 和 crawl_time。
  4. 隐私与版权

    • 仅限公开榜单数据,禁止采集用户 UID、手机号、私信等隐私信息。
  5. 商业使用建议

    • 长期/商业项目建议接入微博开放平台官方 API 或购买正规数据服务。

7. 结论与执行建议

  • 热搜总榜有一条稳定、无需登录的公开 JSON 接口 (/ajax/side/hotSearch),适合作为种子数据采集的主数据源。
  • 文娱/社会/生活等多榜需要登录态 Cookie(ajax/statuses/{category}),建议在 Digester 阶段攻克。
  • 第三方聚合 API 字段精简但可用性高,适合作为降级/对账来源。
  • s.weibo.com 和 m.weibo.cn 的公开入口已被 visitor 验证或风控拦截,不建议作为主力爬取入口。
  • 建议后续通过 Cookie 池 或 浏览器自动化 解锁垂直榜单端点,实现真正的多榜整合。

报告由 Hunter Agent 生成 | 验收标准: 数据源 ≥5 个 ✅ | 含字段映射表 ✅ | 含反爬/合规分析 ✅