问答
获取小红书笔记一定要 xsec_token 吗?只有笔记 ID 怎么办?
简短回答
走小红书自己的网页接口,基本需要:不带搜索或推荐流里那个 xsec_token 去打开笔记,经常被拒,而且 token 没法从笔记 ID 推算。通过 okdata 只要传笔记 ID 或分享链接,每篇 $0.02 就能拿到笔记详情,token 由我们这边处理。
手上有一张表,是上个月投放的笔记 ID,想刷新一下点赞和收藏数。脚本里直接打开 xiaohongshu.com/explore/<id>,要么是空页面,要么提示笔记暂时无法浏览,要么返回 461;可同一篇笔记从 App 里复制出来的链接却能打开。区别就在链接后面的 xsec_token 参数。小红书在搜索结果、推荐流和主页里展示每篇笔记时都会附上它,打开笔记时再做校验。它由服务端下发,和你从哪里看到这篇笔记有关,还会过期。没有公式能把笔记 ID 变成有效的 token,所以“怎么通过 note_id 获取 xsec_token”才会在各个爬虫项目的 issue 里反复出现。
改成按 ID 或链接取
小红书笔记详情接口接受 id(24 位笔记 ID)或 url(笔记网页链接或 xhslink.com 分享短链),二选一,不需要传 token。返回标题、全文、全部图片或视频、点赞、收藏、评论数、分享数、话题标签和发布时间。
如果你是从关键词出发,笔记搜索返回的结果里就有笔记 ID,可以直接拿去调详情。
费用
| 要刷新的笔记数 | 调用次数 | 费用 |
|---|---|---|
| 1 | 1 | $0.02 |
| 100 | 100 | $2.00 |
| 1,000 | 1,000 | $20.00 |
如果你只关心某个关键词下排得上的笔记的数据,搜索结果本身就带点赞、收藏和评论数,一次能看约 20 篇。
Python 示例
import os, requests
ids = ["6650a1b2000000001e00abcd"]
for note_id in ids:
r = requests.get(
"https://api.okdata.online/v1/xiaohongshu/notes/get",
headers={"Authorization": f"Bearer {os.environ['OKDATA_API_KEY']}"},
params={"id": note_id, "fields": "id,title,metrics.likes,metrics.favorites,metrics.comments"},
timeout=60,
)
print(r.json()["data"]["item"])
加上 view=full 时,如果小红书给这篇笔记附带了 token,会放在 ext.xsec_token 里返回,想拼一个能在浏览器里打开的链接时用得上。
注意事项
- 已删除或私密的笔记返回
not_found,不扣费。 metrics.views为 null,小红书不公开浏览量。- 笔记详情没有批量接口,每篇一次调用、一次扣费。
其他做法
XHS-Downloader、Spider_XHS 这类开源工具接受带 token 的完整链接,用自己的浏览器登录态偶尔下载几篇很好用;但 token 缺失或过期就会失败。如果你手上只有 ID,或者每周都要刷新同一批笔记,按 ID 调用更省事。每周定时刷新的做法见竞品监测方案。
更新于