问答

怎么监控小红书关键词,每天拿到新发布的笔记?

简短回答

每天用 okdata 按 sort=latest 搜一次关键词,翻到比上次运行更早的笔记就停。大多数品牌词一天只需要 1 到 3 页,一个关键词每天 $0.02 到 $0.06;10 个关键词每天各翻 2 页,一个月共 $12.00。

你想每天早上拿到一份清单,列出所有新发布的、提到自家品牌、竞品或某个产品名的小红书笔记,好让社媒团队中午前决定回复、转发还是上报。人工搜容易漏,App 里的搜索结果又把以前的热门笔记和新笔记混在一起。每天按最新排序搜一次,翻到上次运行的位置就停,得到的就是这份清单。

做法

用小红书笔记搜索,参数 sort=latest。结果从新到旧排列,每页约 20 篇,每篇带 published_at、标题、正文、图片、作者和各项数据。

  1. 每天跑一次搜索(新品上市期间可以几小时一次)。
  2. 只保留 published_at 晚于上次运行时间的笔记。
  3. 一旦某页出现更早的笔记,或者出现已经存过的 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 也能用登录账号跑同样的搜索。要把评论和博主也纳入监测,可以看口碑监测方案。

更新于