requests+BeautifulSoup无法抓取知乎/小红书动态内容,因其首页及话题页为JS渲染空壳页面,真实数据需调用带鉴权签名(如X-Zse-96、X-Sign)的加密接口,且存在滑块验证与设备指纹封禁风险。
不能直接抓取知乎或小红书的热门话题与互动数据——它们的前端页面基本由 JavaScript 动态渲染,且接口有严格鉴权(Cookie、X-Zse-96、X-Tt-Token、设备指纹等),未授权爬取违反其 robots.txt 和用户协议,法律与技术风险都很高。
为什么 requests + BeautifulSoup 会失败
知乎和小红书首页、话题页、笔记/回答列表均不返回真实数据的 HTML,而是加载一个空壳页面,再通过 JS 请求加密接口(如知乎的 /api/v4/topics/*/hot、小红书的 /api/sns/web/v1/homefeed)获取内容。用 requests.get() 拿到的只是骨架,没有 hot_list、interact_info 等字段。
- 抓包看到的接口大多带签名参数(如
_signature、x-s),需逆向 JS 生成逻辑 - 小红书的
X-Sign依赖设备 ID、时间戳、请求体哈希,每次变动 - 知乎的
X-Zse-96是基于请求路径、时间、cookie的 RSA+MD5 混合签名 - 频繁请求会触发滑块验证或封禁 IP+设备指纹
合法替代方案:优先用官方 API 或开放平台
小红书提供「专业号平台」数据看板(仅限认证账号),知乎有「知+」和「盐选后台」的有限数据导出功能,但都不开放给普通用户查全站热榜。真正可用的公开渠道只有:
- 知乎热榜页面
https://www.zhihu.com/hot—— 它是 SSR 渲染的静态 HTML,可解析div.List-item a[href^="/question"]提取标题与链接,但无浏览量、评论数等互动字段 - 小红书热榜需登录且 JS 渲染,无静态入口;其网页端热榜(
https://www.xiaohongshu.com/explore)实际是空容器,无法直取 - 第三方聚合平台如「新榜」「飞瓜数据」提供部分公开榜单,但需付费且数据脱敏(不带原始链接、用户ID)
如果仍要尝试动态接口,必须解决三个硬门槛
绕过鉴权不是改个 User-Agent 就能成的事。你得:
知乎直答
知乎直答是知乎推出的一款AI搜索引擎产品
- 用
Playwright或Selenium启动真实浏览器,复现登录态与行为序列(比如滚动、点击、等待 JS 注入),再从page.evaluate()中提取window.__APOLLO_STATE__或 XHR 响应体 - 对目标接口做完整流量捕获(推荐
mitmproxy),比对不同设备、不同时间的请求头差异,重点抠X-B3-Traceid、X-Device-Id、X-Sign的生成逻辑 - 把签名函数从混淆 JS 中还原(常见于小红书的
webpack:///.xx.js),通常涉及crypto-js、atob、时间偏移校准,且每周可能更新
例如小红书某次 X-Sign 生成依赖:md5(url + body + timestamp + "xsecplatform") + timestamp[-6:] + random(6),而 timestamp 必须与服务端误差 401 Invalid signature。
真实项目里,90% 的“爬小红书热榜”需求最后都退回到 RSS 聚合、关键词微博热搜联动、或采购合规 API——因为逆向成本远高于数据价值。别低估它们风控团队对 Puppeteer 指纹识别的精度。