前言 在种草选品、舆情监控、内容竞品分析等业务场景中,小红书关键词搜笔记是高频刚需。网上多数教程多采用网页爬虫、逆向接口,极易触发风控、频繁失效,且缺乏规范鉴权与生产级异常处理,无法商用落地。本文基于小红书开放平台官方搜索接口,采用标准授权签名机制,实现关键词搜笔记、分页遍历、数据结构化清洗、异常重试封装,全程无爬虫逆向、合规原创,符合
CSDN 审核规范,代码可直接接入项目使用。 小红书内容接口和普通电商接口逻辑不同,侧重内容笔记、博主信息、互动数据。本文区别于网上简易调用教程,核心亮点: 基于开放平台官方接口,规避 IP 封禁、接口失效风险; 封装 Token 自动续期,无需手动管理令牌时效; 内置分页循环、请求间隔控频,适配平台 QPS 限制; 自动清洗冗余字段,只保留笔记标题、封面、点赞、收藏、博主 ID 等核心业务字段; 加入超时重试、异常捕获,适配生产环境稳定调用。 适用场景:种草内容采集、竞品账号监控、关键词热度分析、自媒体内容选题系统开发。 接口名称:笔记关键词搜索接口 请求方式:POST 数据编码:UTF-8 鉴权方式:应用密钥 + AccessToken 授权 限制规则:单应用 QPS 有限制,禁止高频批量爬取,需遵守平台开发者协议 必备参数:开放平台申请 python 禁止使用网页爬虫、抓包逆向接口,极易封号且随时失效,务必走官方开放平台; Token 有有效期,代码内置提前续期,避免接口 401 鉴权失败; 调用必须控制间隔,不要并发狂刷,否则会触发接口限流; 搜索返回字段冗余,业务开发只需解析笔记 ID、互动量、博主信息等关键字段,减少存储压力; 商用务必在平台完成企业认证,遵守数据使用规范,不可倒卖笔记与用户隐私数据。一、接口特性与差异化亮点
二、接口基础接入规范
client_id、client_secret,完成应用权限开通。
点击获取key和secret
三、完整可运行 Python 代码
运行import requests
import time
import json
class XiaohongshuSearchApi:
def __init__(self, client_id, client_secret):
self.client_id = client_id
self.client_secret = client_secret
self.token_url = "https://open.xiaohongshu.com/oauth2/token"
self.search_url = "https://open.xiaohongshu.com/api/note/search"
self.access_token = ""
self.expire_time = 0
self.timeout = 15
def get_access_token(self):
"""自动获取并续期授权Token"""
if self.access_token and time.time() < self.expire_time - 120:
return self.access_token
data = {
"client_id": self.client_id,
"client_secret": self.client_secret,
"grant_type": "client_credentials"
}
res = requests.post(self.token_url, data=data, timeout=self.timeout)
res_json = res.json()
self.access_token = res_json.get("access_token")
self.expire_time = time.time() + res_json.get("expires_in", 7200)
return self.access_token
def parse_note_data(self, item):
"""结构化清洗笔记核心数据"""
return {
"note_id": item.get("note_id"),
"title": item.get("title"),
"cover_img": item.get("cover_image"),
"author_id": item.get("author", {}).get("user_id"),
"like_count": item.get("like_count", 0),
"collect_count": item.get("collect_count", 0),
"comment_count": item.get("comment_count", 0),
"publish_time": item.get("publish_time")
}
def search_note(self, keyword, page=1, page_size=20):
"""关键词搜索笔记,带重试与控频"""
token = self.get_access_token()
headers = {
"Authorization": f"Bearer {token}",
"Content-Type": "application/json;charset=UTF-8"
}
payload = {
"keyword": keyword,
"page": page,
"page_size": page_size
}
for _ in range(2):
try:
time.sleep(0.8)
resp = requests.post(self.search_url, headers=headers,
data=json.dumps(payload), timeout=self.timeout)
result = resp.json()
if result.get("code") != 0:
return {"code": -1, "msg": result.get("message")}
note_list = [self.parse_note_data(item) for item in result.get("data", {}).get("list", [])]
return {
"code": 200,
"keyword": keyword,
"page": page,
"total": result.get("data", {}).get("total", 0),
"notes": note_list
}
except Exception as e:
time.sleep(1)
return {"code": 500, "msg": f"请求异常:{str(e)}"}
if __name__ == "__main__":
api = XiaohongshuSearchApi("your_client_id", "your_client_secret")
ret = api.search_note("护肤好物", page=1, page_size=20)
print(json.dumps(ret, ensure_ascii=False, indent=2))四、对接避坑要点