问答

怎么导出一个小红书博主主页的全部笔记?

简短回答

把博主的用户 ID 传给 okdata 的小红书博主笔记列表接口,顺着游标往下翻;每页约 20 篇,$0.02 一次。有 300 篇笔记的博主需要 15 次调用,共 $0.30;翻到已经存过的笔记就可以提前停下。

想拆解一个竞品小红书账号:哪些笔记爆了,多久发一次,反复在讲哪些话题。这需要把主页上的每一篇笔记连同数据放进一张表。下载类工具能存图片,但给不了一张干净的表;爬虫又经常只抓到第一屏,或者抓到的篇数比主页显示的少。博主笔记列表接口会一页页把它们全列出来,再用一小段脚本整理成表。

调用步骤

  1. 手上是分享短链而不是 ID 时,先用 url= 调一次博主信息,返回里有用户 id,posts 是笔记总数。xiaohongshu.com/user/profile/<id> 这种链接本身就包含 ID。
  2. 用 id 调小红书博主笔记列表。每页约 20 篇,从新到旧,带标题、类型(图文或视频)、封面图、发布时间、点赞、收藏和评论数。
  3. 把 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 的博主模式需要登录账号。要每周跟踪多个竞品账号,可以看竞品监测方案。

更新于