问答

怎么把一篇小红书笔记的全部评论导出到 Excel?

简短回答

用笔记 ID 调 okdata 的小红书笔记评论接口,一直把游标传回去直到翻完;每页约 10 条,$0.02 一次。1,000 条评论需要 100 次调用,共 $2.00,每条带内容、时间、点赞、回复数和 IP 属地。

竞品有一篇种草笔记下面有 2,000 条评论,你想把它们放进表格,看看用户到底在吐槽什么。App 里往下刷,刷一阵就加载不出来了;用爬虫,常常只拿到前 10 条,或者翻到一半就超时。下面这个办法能稳稳翻到底。评论接口会帮你一页页翻完,再用一小段脚本写成 CSV。

用哪个接口

小红书笔记评论接口传入笔记 ID,每次返回约 10 条评论,每条有评论内容、发布时间、评论者昵称和 ID、点赞数、楼下回复数,以及小红书展示的 IP 属地。page.next_cursor 指向下一页,page.has_more 为 false 就说明翻完了。

笔记 ID 是链接里 /explore/ 后面那串 24 位字符。如果手上只有 xhslink.com 分享短链,先用 url= 调一次笔记详情,从结果里读出 id。

费用

评论数 调用次数 费用
200 20 $0.40
1,000 100 $2.00
2,000 200 $4.00

每一页返回时单独扣费。只想抽样的话,给翻页次数设个上限。

脚本:笔记 ID 导出成 CSV

import csv, os, requests

URL = "https://api.okdata.online/v1/xiaohongshu/notes/comments/list"
HEAD = {"Authorization": f"Bearer {os.environ['OKDATA_API_KEY']}"}
note_id, cursor, max_pages = "6650a1b2000000001e00abcd", None, 200

with open("comments.csv", "w", newline="", encoding="utf-8-sig") as f:
    w = csv.writer(f)
    w.writerow(["published_at", "author", "text", "likes", "replies", "ip_location"])
    for _ in range(max_pages):
        params = {"id": note_id, **({"cursor": cursor} if cursor else {})}
        body = requests.get(URL, headers=HEAD, params=params, timeout=60).json()
        for c in body["data"]["items"]:
            w.writerow([c["published_at"], c["author"]["name"], c["text"], c["likes"], c["replies"], c["ip_location"]])
        if not body["page"]["has_more"]:
            break
        cursor = body["page"]["next_cursor"]

用 utf-8-sig 编码保存,Excel 打开中文才不会乱码。

为什么导出的条数比评论数少

  • 笔记上显示的评论数包含楼中楼回复。这个接口返回一级评论,回复只体现在每行的 replies 数字里,不逐条列出。
  • 被作者或平台隐藏、删除的评论不公开,自然拿不到。
  • 评论者的粉丝数这里是 null;值得关注的评论者,可以再用博主信息查一下。

其他办法

只有一篇笔记的话,手动复制也行。MediaCrawler 可以用登录账号连同楼中楼一起抓,前提是你能接受账号风险。如果要对几十篇笔记做评论分析,可以参考口碑分析方案,从搜索到评论再到汇总,一条流程走完。

更新于