×

小红书笔记搜索接口实战:官方鉴权封装 + 结构化数据解析(Python 版)

Ace Ace 发表于2026-05-06 18:01:07 浏览60 评论0

抢沙发发表评论

前言

在种草选品、舆情监控、内容竞品分析等业务场景中,小红书关键词搜笔记是高频刚需。网上多数教程多采用网页爬虫、逆向接口,极易触发风控、频繁失效,且缺乏规范鉴权与生产级异常处理,无法商用落地。本文基于小红书开放平台官方搜索接口,采用标准授权签名机制,实现关键词搜笔记、分页遍历、数据结构化清洗、异常重试封装,全程无爬虫逆向、合规原创,符合  CSDN 审核规范,代码可直接接入项目使用。

一、接口特性与差异化亮点

小红书内容接口和普通电商接口逻辑不同,侧重内容笔记、博主信息、互动数据。本文区别于网上简易调用教程,核心亮点:

  1. 基于开放平台官方接口,规避 IP 封禁、接口失效风险;

  2. 封装 Token 自动续期,无需手动管理令牌时效;

  3. 内置分页循环、请求间隔控频,适配平台 QPS 限制;

  4. 自动清洗冗余字段,只保留笔记标题、封面、点赞、收藏、博主 ID 等核心业务字段;

  5. 加入超时重试、异常捕获,适配生产环境稳定调用。

适用场景:种草内容采集、竞品账号监控、关键词热度分析、自媒体内容选题系统开发。

二、接口基础接入规范

  • 接口名称:笔记关键词搜索接口

  • 请求方式:POST

  • 数据编码:UTF-8

  • 鉴权方式:应用密钥 + AccessToken 授权

  • 限制规则:单应用 QPS 有限制,禁止高频批量爬取,需遵守平台开发者协议

  • 必备参数:开放平台申请client_idclient_secret,完成应用权限开通。

点击获取key和secret

三、完整可运行 Python 代码

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))

四、对接避坑要点

  1. 禁止使用网页爬虫、抓包逆向接口,极易封号且随时失效,务必走官方开放平台;

  2. Token 有有效期,代码内置提前续期,避免接口 401 鉴权失败;

  3. 调用必须控制间隔,不要并发狂刷,否则会触发接口限流;

  4. 搜索返回字段冗余,业务开发只需解析笔记 ID、互动量、博主信息等关键字段,减少存储压力;

  5. 商用务必在平台完成企业认证,遵守数据使用规范,不可倒卖笔记与用户隐私数据。

群贤毕至

访客