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_notes和get_user_like_notes看对方公开的收藏与点赞,做竞品账号画像很好用。
场景三:评论与内容发现。get_note_all_comments递归翻页抓取全部评论及子评论,返回扁平化列表;get_note_by_keyword支持关键词搜索,可按综合/最热/最新排序、按图文/视频过滤;get_home_feed拉取推荐、穿搭、美食等十余个分类的信息流。
场景四:互动与发布。like_note、collect_note、comment_note、follow_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 省心。
第一次跑通前必读:五个高频坑
- 签名报
window._webmsxyw is not a function→ 原因:小红书页面 JS 还没加载完就执行了签名 → 解法:按官方示例给 sign 包一个 10 次重试循环,浏览器加完 cookie 后sleep(1)再签名。 - 签名持续失败,返回 300015→ 原因:Cookie 里的 a1 和签名服务用的 a1 不一致 → 解法:确认 Cookie 中 a1、webId、web_session 三字段齐全;自建 Flask 签名服务时让两者 a1 保持一致(服务自带
/a1接口可查),参考 example/basic_sign_server.py。 - 抛出
IPBlockError(错误码 300012)→ 原因:请求过于密集,IP 被限 → 解法:批量方法把crawl_interval调到 1 秒以上,自己写的循环加time.sleep,仍不行就换网络段。 - 请求全部报
DataFetchError,提示登录已过期→ 原因:web_session 失效 → 解法:走get_qrcode()/check_qrcode()扫码重新登录,cookie 自动写回 client,别再手动复制。 - 发布或互动脚本误跑在生产账号→ 原因:写操作不可逆 → 解法:正式账号使用前先用测试账号跑通,发布时加
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 installQ:搜索、评论、信息流接口细节在哪看?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),仅供参考