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/weibov2.xxapi.cn/api/weibohotapi.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 维护(针对需登录榜单):
- 手动导出浏览器
SUB和XSRF-TOKEN。 - 使用 Playwright/Selenium 定期扫码登录,自动提取新 Cookie。
- 准备 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 清洗规则
字段标准化
- 所有字段名统一为
snake_case - 热度值统一为纯数字(去除
万/万+后缀) - 空值用
''或0填充
- 所有字段名统一为
Unicode 解码
- API 返回的 JSON 可能含 Unicode 转义,入库前必须解码为 UTF-8
去重规则
- 联合键:
word+board_type+crawl_time(按小时截断)
- 联合键:
置顶处理
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. 合规要求
遵守 robots.txt
weibo.com/robots.txt限制了部分路径,公开 API 端点未明确禁止。
频率与负载控制
- 请求间隔 ≥2 秒(建议 ≥30 秒),避免对服务器造成过度负载。
数据溯源
- 每条记录必须保留
source_url和crawl_time。
- 每条记录必须保留
隐私与版权
- 仅限公开榜单数据,禁止采集用户 UID、手机号、私信等隐私信息。
商业使用建议
- 长期/商业项目建议接入微博开放平台官方 API 或购买正规数据服务。
7. 结论与执行建议
- 热搜总榜有一条稳定、无需登录的公开 JSON 接口 (
/ajax/side/hotSearch),适合作为种子数据采集的主数据源。 - 文娱/社会/生活等多榜需要登录态 Cookie(
ajax/statuses/{category}),建议在 Digester 阶段攻克。 - 第三方聚合 API 字段精简但可用性高,适合作为降级/对账来源。
- s.weibo.com 和 m.weibo.cn 的公开入口已被 visitor 验证或风控拦截,不建议作为主力爬取入口。
- 建议后续通过 Cookie 池 或 浏览器自动化 解锁垂直榜单端点,实现真正的多榜整合。
报告由 Hunter Agent 生成 | 验收标准: 数据源 ≥5 个 ✅ | 含字段映射表 ✅ | 含反爬/合规分析 ✅