应采用DrissionPage模拟浏览器、逆向XHR签名、部署代理与设备指纹池三重策略。具体包括:一、用DrissionPage操控Chromium,注入Cookie并滚动加载;二、解析JS提取x-s/x-t签名逻辑,动态生成请求头;三、轮换20+组真实指纹与高匿代理IP,配合随机延迟防风控。

如果您尝试通过程序自动化获取小红书网页版公开内容,但发现数据无法稳定提取或请求频繁失败,则可能是由于小红书当前实施了多层级反爬机制。以下是可行的应对方法:
一、使用 DrissionPage 模拟真实浏览器行为
DrissionPage 能绕过基础指纹检测,通过操控 Chromium 实例模拟人工滚动、点击与等待,降低被识别为机器的概率。其核心优势在于复用真实浏览器环境,规避纯 requests 请求触发的 Canvas/WebGL 设备指纹校验。
1、安装依赖库:执行 pip install DrissionPage pandas。
2、初始化无头浏览器实例:调用 ChromiumPage(addr_or_opts=None, timeout=10) 创建可控页面对象。
3、访问目标页前注入有效 Cookie:从已登录的小红书网页中复制 web_session、a1、gid 等关键字段,通过 set_cookies() 方法写入会话。
4、执行滚动加载:使用 ele.scroll.to_see() + page.wait.eles_loaded() 触发分页接口,逐批捕获动态渲染的笔记节点。
二、解析 XHR 接口并构造合法签名请求
小红书 Web 端所有核心数据(如搜索结果、评论列表)均通过加密 API 返回,需逆向还原 x-s/x-t 动态签名逻辑,否则将返回 401 或空响应体。签名密钥每5分钟轮换,必须实时提取 JS 上下文中的加密函数。
1、在开发者工具 Network 面板中筛选 /api/sns/web/v1/search/notes 类请求,右键 Copy → Copy as cURL (bash)。
2、将 cURL 转为 Python requests 代码后,提取原始请求头中的 x-s 和 x-t 字段值。
3、定位混淆 JS 文件(通常位于 https://www.xiaohongshu.com/api/sns/web/static/js/*.js),使用 AST 解析或正则提取签名生成函数主体。
4、在 Python 中调用 execjs 或 PyExecJS 执行该函数,传入当前时间戳与请求参数,生成新签名并替换 header。
三、部署代理与设备指纹池轮换
单一 IP 在高频请求下会在 3~5 分钟内被限流,且账号级风控会关联设备指纹。需构建包含不同 Canvas 哈希、WebGL 渲染器字符串、字体列表及 User-Agent 的指纹集合,并配合代理 IP 池实现请求隔离。
1、采集至少 20 组真实浏览器指纹:使用 Puppeteer 或 Playwright 启动不同配置的浏览器实例,分别读取 navigator.plugins、screen.colorDepth、navigator.hardwareConcurrency 等字段。
2、将指纹数据序列化为 JSON 文件,每次请求前随机选取一组注入 ChromiumPage 实例。
3、配置 HTTP 代理中间件,确保每个会话绑定独立出口 IP,代理类型须为 高匿 HTTPS 支持 + 30秒以上存活周期。
4、对同一账号请求间隔设置 8~15 秒随机延迟,避免固定节律触发行为分析模型。











