news 2026/8/23 14:09:52

xhs 小红书公开数据抓取从零教程:15 分钟拿到第一条数据,附避坑清单

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
xhs 小红书公开数据抓取从零教程:15 分钟拿到第一条数据,附避坑清单

xhs 小红书公开数据抓取从零教程:15 分钟拿到第一条数据,附避坑清单

【免费下载链接】xhs基于小红书 Web 端进行的请求封装。https://reajason.github.io/xhs/项目地址: https://gitcode.com/gh_mirrors/xh/xhs

你正在跟踪三个竞品账号的更新节奏:每天手动翻它们的主页,把新笔记的点赞、评论数记进 Excel,漏记一条就要重翻半天。这种活交给 Python 跑小红书 Web 端的抓取接口要高效得多。xhs 是一个开源库,把小红书 Web 端请求封装成现成的 Python 方法——传入登录后的 Cookie 和签名函数,就能直接拿回笔记详情、用户主页、完整评论等结构化数据,还支持点赞、关注和发布笔记。想搭内容监控、选题调研或自动化运营脚本的 Python 用户,可以直接用它。

环境搭建:安装 xhs 并配置签名

跑通前先把这几项准备好:

  • Python 3.7 及以上
  • pip install xhs(依赖 requests、lxml,装完即可导入)
  • pip install playwright再执行playwright install,签名需要无头 Chromium
  • 下载一份 stealth.min.js(反爬绕过脚本)放到本地,签名函数会注入它

下面的代码用 Cookie 和 sign 函数初始化XhsClient,然后调用get_note_by_id拉一条笔记,打印标题和互动数据:

from xhs import XhsClient client = XhsClient(cookie="YOUR_COOKIE", sign=sign) note = client.get_note_by_id("NOTE_ID", "XSEC_TOKEN") print(note["title"], note["interact_info"])

sign函数按 example/basic_sign_usage.py 里的写法实现即可。控制台打出笔记标题和liked_count等互动字段,说明环境 OK。

xhs 能力地图:四个使用场景

场景一:拉单条笔记内容。核心方法是get_note_by_id,传笔记 ID 和 xsec_token,返回note_card字典,含 title、desc、image_list、interact_info(点赞/收藏/评论/转发数)。素材收集时save_files_from_note_id更省事:传笔记 ID 和本地目录,图片/视频自动下载到以标题命名的文件夹里。

场景二:批量整理一个账号的全部作品。核心方法是get_user_all_notes:内部按 cursor 自动翻页,逐条拉取笔记详情并组装成Note对象列表,含 title、img_urls、video_url、liked_count、time 等字段,crawl_interval=1控制请求间隔,异常笔记会被跳过。另有get_user_info拿公开资料、get_user_collect_notesget_user_like_notes看对方公开的收藏与点赞,做竞品账号画像很好用。

场景三:评论与内容发现get_note_all_comments递归翻页抓取全部评论及子评论,返回扁平化列表;get_note_by_keyword支持关键词搜索,可按综合/最热/最新排序、按图文/视频过滤;get_home_feed拉取推荐、穿搭、美食等十余个分类的信息流。

场景四:互动与发布like_notecollect_notecomment_notefollow_user一一对应点赞、收藏、评论、关注(均有取消/删除方法);create_image_note上传本地图片发图文笔记,create_video_note支持视频分片上传、定时与私密发布,示例见 example/login_qrcode_from_creator.py。

小红书登录认证四种方式对比

方式操作适用场景注意点
Cookie 直传浏览器复制 Cookie 传给XhsClient(cookie=...)快速测试a1、webId、web_session 三字段缺一不可,过期需手动换
扫码登录get_qrcode()生成二维码,check_qrcode()轮询日常脚本轮询到code_status == 2后 cookie 自动写入 client,见 example/login_qrcode.py
手机号登录send_code()发短信,check_code()校验,login_code()完成登录不想开浏览器验证码有时效,失败会报 DataFetchError,重新输入即可,见 example/login_phone.py
创作者扫码登录get_qrcode_from_creator()+check_qrcode_from_creator(),最后login_from_creator()需要发布笔记发布接口依赖 creator 域登录态,见 example/login_qrcode_from_creator.py

日常脚本建议优先用扫码登录,因为一次拿到完整 cookie 且不用手动维护,比定期替换 Cookie 省心。

第一次跑通前必读:五个高频坑

  1. 签名报window._webmsxyw is not a function→ 原因:小红书页面 JS 还没加载完就执行了签名 → 解法:按官方示例给 sign 包一个 10 次重试循环,浏览器加完 cookie 后sleep(1)再签名。
  2. 签名持续失败,返回 300015→ 原因:Cookie 里的 a1 和签名服务用的 a1 不一致 → 解法:确认 Cookie 中 a1、webId、web_session 三字段齐全;自建 Flask 签名服务时让两者 a1 保持一致(服务自带/a1接口可查),参考 example/basic_sign_server.py。
  3. 抛出IPBlockError(错误码 300012)→ 原因:请求过于密集,IP 被限 → 解法:批量方法把crawl_interval调到 1 秒以上,自己写的循环加time.sleep,仍不行就换网络段。
  4. 请求全部报DataFetchError,提示登录已过期→ 原因:web_session 失效 → 解法:走get_qrcode()/check_qrcode()扫码重新登录,cookie 自动写回 client,别再手动复制。
  5. 发布或互动脚本误跑在生产账号→ 原因:写操作不可逆 → 解法:正式账号使用前先用测试账号跑通,发布时加is_private=True私密预览确认无误。

xhs 常见问题 FAQ

Q:get_note_by_id要求的 xsec_token 去哪找?在小红书网页版打开目标笔记,地址栏 URL 上的xsec_token查询参数就是,原样复制传入即可。

Q:想装最新源码版本怎么办?

git clone https://gitcode.com/gh_mirrors/xh/xhs cd xhs python setup.py install

Q:搜索、评论、信息流接口细节在哪看?docs/crawl.rst 覆盖主页爬取各类接口;docs/basic.rst 讲签名原理与基础用法;发布功能看 docs/creator.rst。

Q:爬的数据能商用吗?只采集公开数据、控制请求频率,合规责任在自己;项目定位是技术学习与个人研究,商用前请先确认平台规则与法律法规。

从单条数据到稳定数据流水线

第一条数据跑通后路线就清晰了:固定一批笔记 ID 做单条拉取,再用get_user_all_notes组合成竞品账号日更监控任务,然后挂上定时调度,最后把结果写进自己的表格或看板。现在就动手,把示例代码里的 Cookie 换成你自己的,十五分钟内让第一条数据输出。

【免费下载链接】xhs基于小红书 Web 端进行的请求封装。https://reajason.github.io/xhs/项目地址: https://gitcode.com/gh_mirrors/xh/xhs

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/23 14:08:35

STM32学习之外部中断

1. 中断 常见的书上关于中断举的例子,差不多就是这样:“你正在看书,厨房的水开了,你起来去关火,关了火以后继续看书”,这种例子说他好吧,差不多把中断的概念描述清楚了,但是根本没办…

作者头像 李华
网站建设 2026/8/23 14:06:04

精通JQL查询:jira-ruby让你轻松筛选和导出JIRA问题数据

精通JQL查询:jira-ruby让你轻松筛选和导出JIRA问题数据 【免费下载链接】jira-ruby A Ruby gem for the JIRA REST API 项目地址: https://gitcode.com/gh_mirrors/ji/jira-ruby jira-ruby 是一个面向 JIRA REST API 的 Ruby 库(gem)。…

作者头像 李华
网站建设 2026/8/23 14:04:29

fastblock:基于 SPDK 与 Multi-Raft 的全闪存分布式块存储

fastblock:基于 SPDK 与 Multi-Raft 的全闪存分布式块存储 【免费下载链接】fastblock A distributed block storage system that uses mature Raft protocol and is designed for all-flash scenarios 项目地址: https://gitcode.com/openeuler/fastblock f…

作者头像 李华
网站建设 2026/8/23 13:57:00

电钻电池上电就停?Arduino电池诊断三步读出BMS真实故障

电钻电池上电就停?Arduino电池诊断三步读出BMS真实故障 【免费下载链接】open-battery-information 项目地址: https://gitcode.com/GitHub_Trending/op/open-battery-information 拧到第三颗螺丝,电钻突然停了。你以为是电池报废,其…

作者头像 李华