问答
怎么把一篇小红书笔记的全部评论导出到 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 可以用登录账号连同楼中楼一起抓,前提是你能接受账号风险。如果要对几十篇笔记做评论分析,可以参考口碑分析方案,从搜索到评论再到汇总,一条流程走完。
更新于