问答
小红书一个关键词为什么只能搜到两百来篇笔记?怎么拿到更多?
简短回答
上限在小红书那边:它对每个搜索词只返回有限的页数,所有爬虫和 API 都会碰到,okdata 也一样。想覆盖更多,就把话题拆成更细的关键词,每个词用不止一种排序去搜,再按笔记 ID 去重;每页 $0.02,20 组关键词和排序组合各翻 5 页,共 $2.00。
搜“防晒”,本以为能拿到几千篇笔记,结果工具在两百到两百二十篇左右就停了。换一个爬虫也没用,各个开源项目里大家报的都是差不多的数字。原因是小红书自己对一个搜索词只给到一定的翻页深度。它不返回的结果,任何 API 都变不出来,我们也不会假装可以:小红书停了,page.has_more 就会变成 false。
你能改变的,是一共问了多少个不同的问题。
把网撒大
用小红书笔记搜索:
- 关键词拆细。“防晒”拆成“防晒 油皮”“儿童防晒”“防晒霜 测评”,再加品牌名、成分名。每个词都是一次新的查询,各有各的翻页深度。
- 换排序。
general、latest、popular返回的结果有重叠,但不完全一样。 - 分笔记类型。
type=video和type=image又能把结果池分开。 - **按
id去重。**重叠很正常,统计时数去重后的笔记,而不是行数。 - **按时间累积。**用
sort=latest每天跑一次,新笔记出来就收进来,跑一个月攒下的量远比一次性大爬要多。
预算
| 方案 | 调用次数 | 费用 |
|---|---|---|
| 1 个关键词,翻到底(约 10 页) | 10 | $0.20 |
| 10 个关键词 × 2 种排序 × 5 页 | 100 | $2.00 |
| 10 个关键词按最新,每天 1 页,30 天 | 300 | $6.00 |
示例
for kw in "防晒 油皮" "防晒 儿童" "防晒霜 测评"; do
for s in general latest popular; do
curl -s -G "https://api.okdata.online/v1/xiaohongshu/notes/search" \
-H "Authorization: Bearer $OKDATA_API_KEY" \
--data-urlencode "query=$kw" -d "sort=$s" -d "fields=id,title,metrics.likes" >> notes.jsonl
echo >> notes.jsonl
done
done
最后在表格或 notebook 里按 id 去重。
另外几点
- 结果可能和你在 App 里看到的不一样,App 会按每个登录用户做个性化排序。
- 每页单独扣费,所以给每个查询设个翻页上限;越往后翻,新增的笔记通常越少。
- 搜索结果里的互动数据已经够排序用了。只对要细读的笔记调笔记详情。
有没有地方能拿到更大的数据集?
公开搜索拿不到。小红书的官方渠道,比如开放平台和蒲公英,服务的是商家和广告主,不提供按关键词批量导出。做学术研究或市场调研需要大样本的话,上面拆关键词的办法是实在的路子。关键词怎么规划,可以参考内容调研方案。
更新于