小红书的item_get接口是获取商品全方位信息的核心工具,能返回商品价格、规格、库存、销量、图文详情等关键数据,适配竞品调研、电商选品、舆情监测等电商相关场景。该接口无官方原生公开接口,多依赖第三方合规服务商封装的接口实现功能,以下是从入门到精通的对接全攻略:
一、接口核心认知
核心功能与价值
核心作用:输入小红书商品唯一标识num_iid(商品 ID),即可获取商品完整信息,涵盖基础信息、交易数据、图文素材等,是衔接小红书商品数据与外部系统的关键接口。
典型场景:电商商家用于竞品价格与销量监测;选品团队批量采集爆款商品参数做选品分析;数据分析平台整合商品数据做行业趋势报告;电商工具开发中嵌入商品详情展示功能。
核心参数说明
该接口参数分为公共参数和请求参数,多数服务商以 GET 方式传参,参数需拼接在 URL 中,具体如下:
参数分类 参数名称 类型 是否必填 说明
公共参数 key String 是 接口调用密钥,由服务商提供
secret String 是 接口调用密钥,用于校验请求合法性
api_name String 是 接口名称,固定为item_get
cache String 否 是否调用缓存数据,默认yes,选no则实时获取数据
result_type String 否 返回格式,默认json,支持xml等,jsonu格式可直接读取中文
请求参数 num_iid String 是 小红书商品 ID,可从商品详情页 URL 中提取
filter String 否 可选筛选,如note可同步获取商品关联的笔记 / 视频内容
接口限制与合规前提
调用频率:普通用户通常 10 - 30 次 / 分钟,企业用户可提升至 50 - 200 次 / 分钟,不同服务商限制不同;
数据缓存:默认缓存时长 30 分钟左右,实时性要求高的场景需手动指定cache=no;
合规要求:禁止使用非法爬虫封装的接口,需通过合规第三方服务商或官方授权渠道对接,数据仅用于合规业务,严禁售卖或恶意爬取用户隐私数据。
二、对接前置准备
获取接口密钥
小红书无公开的原生item_get接口,需通过合规第三方服务商获取,步骤如下:
选择服务商:优先挑选聚合数据、阿里云 API 市场等有资质的平台,避免小众无保障渠道;
注册认证:在服务商平台完成个人或企业认证,企业认证需提供营业执照,认证后可提升调用配额;
申请接口:搜索 “小红书 item_get 接口”,提交业务用途说明(如 “电商竞品分析”),审核通过后获取key和secret;
核对文档:下载服务商提供的接口文档,确认请求地址、签名规则等细节。
技术环境搭建
支持语言与协议:接口多采用 HTTPS 协议,支持 Python、Java、PHP 等主流语言,Python 适配性最佳,适合快速开发与数据处理;
必备工具与依赖:调试用 Postman、在线 JSON 解析工具;开发依赖 Python 的requests库用于网络请求,json库解析响应数据,beautifulsoup4用于处理商品 HTML 格式详情。
三、实操落地:Python 代码实现完整流程
以下以 Python 为例,实现接口调用、数据解析、异常处理等全流程,代码可直接替换密钥后调试使用。
安装依赖
先安装所需第三方库,执行如下命令:
bash
运行
pip install requests json
完整代码实现
代码包含签名生成、接口请求、数据标准化处理、异常捕获等功能,适配生产场景:
```import requests
import hashlib
import time
import json
import logging
配置日志,记录接口调用情况
logging.basicConfig(
level=logging.INFO,
format="%(asctime)s - %(levelname)s - %(message)s",
handlers=[logging.FileHandler("xiaohongshu_item_get.log"), logging.StreamHandler()]
)
接口核心配置,替换为服务商提供的信息
API_KEY = "你的key"
API_SECRET = "你的secret"
API_URL = "https://api - gw.onebound.cn/smallredbook/item_get" # 服务商接口地址
def generate_sign(params):
"""生成签名,不同服务商规则可能不同,此处为通用MD5规则"""
# 按参数名ASCII升序排序
sorted_params = sorted(params.items(), key=lambda x: x[0])
# 拼接参数字符串
param_str = "&".join([f"{k}={v}" for k, v in sorted_params]) + f"&secret={API_SECRET}"
# MD5加密并转为大写
md5 = hashlib.md5()
md5.update(param_str.encode("utf - 8"))
return md5.hexdigest().upper()
def get_xiaohongshu_item(num_iid, cache="no"):
"""
调用item_get接口获取小红书商品详情
:param num_iid: 小红书商品ID
:param cache: 是否使用缓存
:return: 标准化后的商品数据
"""
# 1. 构建请求参数
params = {
"key": API_KEY,
"api_name": "item_get",
"num_iid": num_iid,
"cache": cache,
"timestamp": str(int(time.time() * 1000)) # 毫秒级时间戳
}
# 2. 生成签名
params["sign"] = generate_sign(params)
try:
# 3. 发送GET请求
response = requests.get(
url=API_URL,
params=params,
timeout=15,
verify=True
)
response.raise_for_status()
result = response.json()
# 4. 解析响应数据
if result.get("code") == 200 and result.get("data"):
raw_data = result["data"]
# 标准化数据格式
standard_data = {
"商品ID": raw_data.get("num_iid", ""),
"商品名称": raw_data.get("title", ""),
"商品价格": raw_data.get("price", 0),
"优惠价格": raw_data.get("promotion_price", 0),
"库存": raw_data.get("stock", 0),
"销量": raw_data.get("sales", 0),
"品牌": raw_data.get("brand", ""),
"商品主图": raw_data.get("pic_url", ""),
"商品图集": ",".join(raw_data.get("pic_list", [])),
"商品规格": str(raw_data.get("spec_list", {})),
"商品详情": raw_data.get("desc", ""),
"店铺名称": raw_data.get("shop_name", ""),
"店铺评分": raw_data.get("shop_score", 0),
"发布时间": raw_data.get("pub_time", ""),
"数据获取时间": time.strftime("%Y - %m - %d %H:%M:%S", time.localtime())
}
return {"success": True, "data": standard_data}
else:
error_msg = result.get("msg", "接口调用失败")
logging.error(f"数据获取失败:{error_msg}")
return {"success": False, "error_msg": error_msg}
except requests.exceptions.RequestException as e:
logging.error(f"网络异常:{str(e)}")
return {"success": False, "error_msg": f"网络异常:{str(e)}"}
except Exception as e:
logging.error(f"数据处理异常:{str(e)}")
return {"success": False, "error_msg": f"数据处理异常:{str(e)}"}
调用示例
if name == "main":
# 替换为实际小红书商品ID
test_item_id = "5eb1097ba091410953951d17"
item_info = get_xiaohongshu_item(test_item_id)
if item_info["success"]:
print("商品详情获取成功:")
for key, value in item_info["data"].items():
print(f"{key}:{value}")
else:
print(f"商品详情获取失败:{item_info['error_msg']}")
```
四、调试与问题排查
快速调试步骤
优先用 Postman 调试,排除代码逻辑问题,步骤如下:
新建 GET
发送请求,查看响应结果。若返回 200 且数据完整,则接口正常;若报错,按错误码针对性排查。
高频问题解决方案
问题现象 常见原因 排查方案
签名错误(401) secret 错误或参数排序错误 核对 secret 与服务商一致,按 ASCII 升序排序参数后重新生成签名
无数据返回(200 但 data 为空) 商品 ID 错误或商品已下架 检查 num_iid 是否正确,直接访问商品链接确认商品状态
频率超限(429) 调用次数超过配额 降低调用频率,批量请求时增加 6 秒间隔,或申请提升配额
权限不足(403) 账号未认证或套餐等级不够 完成企业认证,升级服务套餐以解锁更高权限
响应超时 网络波动或缓存未关闭 设置超时时间≥15 秒,实时场景添加cache=no参数
五、进阶优化:提升稳定性与效率
性能优化技巧
批量请求优化:批量获取商品数据时,用异步请求库aiohttp替代requests,控制并发数≤5,避免频率超限;
缓存策略:用 Redis 缓存已获取的商品数据,缓存 key 设为num_iid,有效期 1 小时,减少重复请求;
字段筛选:仅保留业务必需字段,如仅需价格和销量,可通过服务商申请字段筛选,减少数据传输量。
生产级稳定性保障
异常重试机制:对 429、500 等错误,采用指数退避策略重试,重试次数≤3 次;对 401、403 等错误直接告警,需人工介入;
密钥安全:生产环境中,将key和secret存储在环境变量或配置中心,避免硬编码;定期轮换密钥,降低泄露风险;
日志监控:记录每次请求的参数、响应和错误信息,用日志工具监控接口可用性,出现连续报错时及时触发告警。
场景化适配
竞品分析:批量采集竞品商品的价格、销量数据,按时间维度统计变化趋势,优化自身定价策略;
选品调研:筛选销量≥1000 的商品,结合商品评价关键词,分析用户偏好,指导选品方向;
电商聚合:合规前提下整合商品数据,搭建垂直领域电商导购平台,标注数据来源为小红书。
六、上线前检查清单
密钥是否存储在环境变量,未硬编码到代码仓库;
异常处理是否覆盖 401、429 等所有高频错误码;
调用频率是否符合服务商限制,批量请求是否有间隔;
数据是否去重,商品下架等无效数据是否过滤;
日志是否完整记录请求参数、响应结果和错误信息;
数据使用场景是否合规,无售卖或违规传播风险。