问答
怎么导出一个小红书博主主页的全部笔记?
简短回答
把博主的用户 ID 传给 okdata 的小红书博主笔记列表接口,顺着游标往下翻;每页约 20 篇,$0.02 一次。有 300 篇笔记的博主需要 15 次调用,共 $0.30;翻到已经存过的笔记就可以提前停下。
想拆解一个竞品小红书账号:哪些笔记爆了,多久发一次,反复在讲哪些话题。这需要把主页上的每一篇笔记连同数据放进一张表。下载类工具能存图片,但给不了一张干净的表;爬虫又经常只抓到第一屏,或者抓到的篇数比主页显示的少。博主笔记列表接口会一页页把它们全列出来,再用一小段脚本整理成表。
调用步骤
- 手上是分享短链而不是 ID 时,先用
url=调一次博主信息,返回里有用户id,posts是笔记总数。xiaohongshu.com/user/profile/<id>这种链接本身就包含 ID。 - 用
id调小红书博主笔记列表。每页约 20 篇,从新到旧,带标题、类型(图文或视频)、封面图、发布时间、点赞、收藏和评论数。 - 把
page.next_cursor作为cursor传回去,直到page.has_more为 false。
每个博主的费用
| 主页笔记数 | 调用次数 | 费用 |
|---|---|---|
| 60 | 3 | $0.06 |
| 300 | 15 | $0.30 |
| 1,000 | 50 | $1.00 |
每周更新时只取第一页,碰到已经存过的笔记 ID 就停,通常每个博主每周只花 $0.02。
脚本
import os, requests
URL = "https://api.okdata.online/v1/xiaohongshu/users/notes/list"
HEAD = {"Authorization": f"Bearer {os.environ['OKDATA_API_KEY']}"}
params, rows = {"id": "5f1234567890abcdef123456"}, []
while True:
body = requests.get(URL, headers=HEAD, params=params, timeout=60).json()
rows += [(n["id"], n["title"], n["published_at"], n["metrics"]["likes"], n["metrics"]["favorites"]) for n in body["data"]["items"]]
if not body["page"]["has_more"]:
break
params["cursor"] = body["page"]["next_cursor"]
print(len(rows), "notes")
注意事项
- 列表里每篇笔记不重复带作者昵称,因为作者就是你查询的这个账号;
meta.unavailable会列出这些字段。 - 小红书不公开浏览量,
metrics.views为 null。 - 要一篇笔记的完整正文和全部图片,笔记详情(每篇 $0.02)是最完整的来源,只对真正要细读的笔记调用就好。
- 如果博主隐藏或限制了部分笔记,公开列表的篇数可能比主页上的计数略少。
其他做法
如果你要的是把几个博主的图片和视频文件存到本地,XHS-Downloader 更合适。MediaCrawler 的博主模式需要登录账号。要每周跟踪多个竞品账号,可以看竞品监测方案。
更新于