问答

不想每天扫码、换 Cookie,怎么定时采集小红书数据?

简短回答

换成不依赖你登录态的 API。用 okdata 时,定时任务只带一个 API key,没有会过期的 Cookie,也不用扫码;每天按关键词拉 3 页搜索结果是 $0.06,博主最新笔记每页 $0.02。

大多数小红书采集工具的流程是:打开浏览器,用手机扫码登录,保存 Cookie,开跑。周二下午在自己电脑上跑一次没问题,可一旦要每天早上 7 点在服务器上自动跑,问题就来了:Cookie 过几天就失效,续期得有人拿手机扫码;有时扫码成功后工具还提示没有登录信息;有的账号搜几次就被踢下线。现在甚至专门有插件只为了帮你自动续 Cookie。让任务改用 API key 而不是登录态来跑,Cookie 和扫码就都不需要了。

改成用 key 跑

用 okdata 时,服务器上只要在环境变量里放一个 API key。key 不会自己过期,也不需要浏览器和手机,任务可以放在 cron、GitHub Actions 或者云函数里。

每日任务的账单

每日任务 调用次数 每天 30 天
1 个关键词,翻 3 页 3 $0.06 $1.80
5 个博主,各取第一页 5 $0.10 $3.00

可以直接放进 cron 的脚本

# 0 7 * * *  python3 xhs_daily.py >> xhs.csv
import csv, os, sys, requests

r = requests.get(
    "https://api.okdata.online/v1/xiaohongshu/notes/search",
    headers={"Authorization": f"Bearer {os.environ['OKDATA_API_KEY']}"},
    params={"query": "露营 装备", "sort": "latest", "fields": "id,title,published_at,metrics.likes,url"},
    timeout=60,
)
r.raise_for_status()
out = csv.writer(sys.stdout)
for n in r.json()["data"]["items"]:
    out.writerow([n["id"], n["title"], n["published_at"], n["metrics"]["likes"], n["url"]])

调用失败时,返回里会说明是否扣费(失败一律不扣)以及要不要重试。响应头里的 X-RateLimit-Remaining 可以告诉循环什么时候该放慢。详见错误码说明。

拿不到的部分

  • 需要登录的数据:你自己的首页推荐、收藏、私密笔记和私信。
  • 浏览量。小红书前台从不公开,metrics.views 为 null。
  • 博主笔记列表里的博主昵称。列表对应的就是你传入的那个账号,需要昵称时调一次博主信息即可。

什么时候还是该登录

如果你运营的是自己的品牌号,想看它的私有数据分析,小红书创作中心和官方开放平台才是正路,这些本来就要你登录。定时采集公开笔记的话,管一个 key 比管 Cookie 省事得多。每天跑关键词的具体做法可以看趋势研究方案。

更新于