如何利用Python抓取知乎或小红书上的热门话题与互动数据?

2026-06-03日常编程126183

requests+BeautifulSoup无法抓取知乎/小红书动态内容,因其首页及话题页为JS渲染空壳页面,真实数据需调用带鉴权签名(如X-Zse-96、X-Sign)的加密接口,且存在滑块验证与设备指纹封禁风险。

不能直接抓取知乎或小红书的热门话题与互动数据——它们的前端页面基本由 JavaScript 动态渲染,且接口有严格鉴权(CookieX-Zse-96X-Tt-Token、设备指纹等),未授权爬取违反其 robots.txt 和用户协议,法律与技术风险都很高。

为什么 requests + BeautifulSoup 会失败

知乎和小红书首页、话题页、笔记/回答列表均不返回真实数据的 HTML,而是加载一个空壳页面,再通过 JS 请求加密接口(如知乎的 /api/v4/topics/*/hot、小红书的 /api/sns/web/v1/homefeed)获取内容。用 requests.get() 拿到的只是骨架,没有 hot_listinteract_info 等字段。

  • 抓包看到的接口大多带签名参数(如 _signaturex-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搜索引擎产品

  • PlaywrightSelenium 启动真实浏览器,复现登录态与行为序列(比如滚动、点击、等待 JS 注入),再从 page.evaluate() 中提取 window.__APOLLO_STATE__ 或 XHR 响应体
  • 对目标接口做完整流量捕获(推荐 mitmproxy),比对不同设备、不同时间的请求头差异,重点抠 X-B3-TraceidX-Device-IdX-Sign 的生成逻辑
  • 把签名函数从混淆 JS 中还原(常见于小红书的 webpack:///.xx.js),通常涉及 crypto-jsatob、时间偏移校准,且每周可能更新

例如小红书某次 X-Sign 生成依赖:md5(url + body + timestamp + "xsecplatform") + timestamp[-6:] + random(6),而 timestamp 必须与服务端误差 401 Invalid signature。

真实项目里,90% 的“爬小红书热榜”需求最后都退回到 RSS 聚合、关键词微博热搜联动、或采购合规 API——因为逆向成本远高于数据价值。别低估它们风控团队对 Puppeteer 指纹识别的精度。

本文地址:https://www.ufcn.cn/tutorials/3428601.html

如非特殊说明,本站内容均来自于网友自主分享,概不代表本站观点,如有任何问题我们都将在收到反馈后的第一时间进行处理!