问答
不想每天扫码、换 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 省事得多。每天跑关键词的具体做法可以看趋势研究方案。
更新于