直接调用微博/抖音官方API基本不可行,因微博hot/statuses/hot_band接口已下线,新版需企业资质+白名单;抖音接口强制校验msToken和device_id且限流极严。

为什么直接调用微博/抖音官方API基本不可行
微博开放平台的 hot/statuses/hot_band 接口已下线,新版 hot/search/hotword 需企业资质+白名单;抖音的 /aweme/v1/web/hotsearch/list/ 接口强制校验 msToken 和 device_id,且每小时限流极严。普通开发者拿到的 token 几乎无法稳定调用超过 5 分钟。
实际能落地的方式只剩模拟真实浏览器行为——但必须绕过反爬核心关卡:
- 所有请求头(
User-Agent、Referer、Cookie)需与当前登录态浏览器完全一致 - 必须复用同一会话(
requests.Session()),否则__RequestVerificationToken类参数会校验失败 - 微博热搜页的
hotrankbfs数据藏在 JSONP 回调里,不是标准 JSON,需用正则提取jQuery.*?({.*?})
用 Selenium + undetected-chromedriver2 绕过基础检测
原生 Selenium 极易被识别为自动化工具,webdriver.webdriver 属性、navigator.webdriver 值、Canvas 指纹等都会暴露。直接装 undetected-chromedriver2 并启用 stealth 模式是目前最省事的方案。
关键配置示例:
import undetected_chromedriver.v2 as uc
options = uc.ChromeOptions()
options.add_argument("--headless") # 无头模式可选,但部分站点需有界面才加载完整 JS
options.add_argument("--no-sandbox")
driver = uc.Chrome(options=options, version_main=120) # 必须匹配本机 Chrome 版本
注意:version_main 参数不填会导致驱动崩溃;--headless=new 在新版 Chrome 中已失效,必须用 --headless。
解析微博热搜时如何处理动态加载和数据混淆
微博热搜页(https://s.weibo.com/top/summary)的数据并非静态 HTML,而是通过 XHR 请求 https://s.weibo.com/ajax/side/hotSearch 获取,返回内容是带时间戳签名的加密 JSON,字段名如 srn(序号)、ht(标题)、num(热度值)。
让 macOS 自动化像说话一样简单 —— 用代码控制你的 Mac,无需学习 AppleScript 系统要求 macOS 14+ (Sonoma) Python 3.9+ 需要开启:辅助功能 + 屏幕录制权限
解析逻辑要点:
- 先用
driver.get()访问页面,等待document.querySelector('.hot-list')出现 - 再执行
driver.execute_script("return window.$CONFIG")提取加密密钥(如有) - 更可靠的做法是监听 Network 面板中
hotSearch请求,用driver.get_log('performance')捕获响应体(需提前开启日志) - 最终解密需逆向 JS:找到
window.decodeURIComponent(escape(...))或 Base64 解码链,常见混淆函数名是_0xXXXX
生成报告时别忽略数据时效性与去重逻辑
热搜榜单每 5–10 分钟更新一次,但抓取耗时可能超过这个间隔。如果两次抓取之间没有做增量比对,生成的周报里会出现大量重复条目,比如「iPhone 15」连续 3 天排第 2,实际只算 1 次热点事件。
建议用热度值 + 标题哈希双维度去重:
import hashlib
def dedupe_key(title, heat):
return hashlib.md5(f"{title.strip()}|{int(heat/100)*100}".encode()).hexdigest()[:8]
同时记录每次抓取的 fetch_time(精确到秒),报告中只保留每个 dedupe_key 最近一次出现的记录。否则凌晨抓的「王一博」和上午抓的「王一博」会被当成两个独立事件。
真正麻烦的是跨平台归一化:微博的「#张杰新歌#」、抖音的「张杰新歌」、小红书的「张杰发新歌了」需要合并为同一事件——这已经超出自动化脚本范畴,得靠关键词规则或轻量 NLP 模型,不是加几行代码就能解决的。
Python免费学习笔记(深入):立即使用
在学习笔记中,你将探索 Python 的核心概念和高级技巧!










