问答
怎么监控小红书关键词,每天拿到新发布的笔记?
简短回答
每天用 okdata 按 sort=latest 搜一次关键词,翻到比上次运行更早的笔记就停。大多数品牌词一天只需要 1 到 3 页,一个关键词每天 $0.02 到 $0.06;10 个关键词每天各翻 2 页,一个月共 $12.00。
你想每天早上拿到一份清单,列出所有新发布的、提到自家品牌、竞品或某个产品名的小红书笔记,好让社媒团队中午前决定回复、转发还是上报。人工搜容易漏,App 里的搜索结果又把以前的热门笔记和新笔记混在一起。每天按最新排序搜一次,翻到上次运行的位置就停,得到的就是这份清单。
做法
用小红书笔记搜索,参数 sort=latest。结果从新到旧排列,每页约 20 篇,每篇带 published_at、标题、正文、图片、作者和各项数据。
- 每天跑一次搜索(新品上市期间可以几小时一次)。
- 只保留
published_at晚于上次运行时间的笔记。 - 一旦某页出现更早的笔记,或者出现已经存过的 ID,就停止翻页。
接口没有按日期筛选的参数,其实也用不着:按最新排序,再按时间截断,得到的就是过去 24 小时的笔记。
费用
| 方案 | 每天调用 | 每天 | 30 天 |
|---|---|---|---|
| 1 个关键词,通常 1 页 | 1 | $0.02 | $0.60 |
| 10 个关键词,各 2 页 | 20 | $0.40 | $12.00 |
| 新品周:5 个关键词每 4 小时一次 | 30 | $0.60 | — |
脚本
import os, requests, datetime as dt
URL = "https://api.okdata.online/v1/xiaohongshu/notes/search"
HEAD = {"Authorization": f"Bearer {os.environ['OKDATA_API_KEY']}"}
since = (dt.datetime.now(dt.timezone.utc) - dt.timedelta(days=1)).strftime("%Y-%m-%dT%H:%M:%S")
params, fresh = {"query": "某品牌 防晒", "sort": "latest"}, []
for _ in range(5): # 翻页上限
body = requests.get(URL, headers=HEAD, params=params, timeout=60).json()
items = body["data"]["items"]
fresh += [n for n in items if n["published_at"] >= since]
if not body["page"]["has_more"] or (items and items[-1]["published_at"] < since):
break
params["cursor"] = body["page"]["next_cursor"]
print(len(fresh), "new notes")
放进 cron,再把 fresh 推到群里或者写进表格。
心里要有数的几件事
- 小红书搜索是模糊匹配,品牌名太短会搜出不相关的笔记。加一个产品词,或者在代码里再按标题和正文过滤一遍。
- 搜索结果里有作者,但没有作者粉丝数。想标出大号发的笔记,用博主信息查一下作者。
- 每页扣一次费,一页里没有新笔记也照样算一次调用。跑的频率要和关键词的热度匹配。
其他选择
舆情监测系统一般也覆盖小红书,带看板和预警,适合完全不想写代码的团队。MediaCrawler 也能用登录账号跑同样的搜索。要把评论和博主也纳入监测,可以看口碑监测方案。
更新于