淘宝关键词搜索 API 系列 数据返回参考(附解析与实战)

淘宝关键词搜索 API 是电商开发者实现商品搜索、竞品分析、市场洞察 的核心工具,核心接口包括 taobao.tbk.item.search(淘宝客搜索)、taobao.item.seller.search(店铺商品搜索)等。其返回数据以 JSON 格式为主,结构规范且字段分层清晰,涵盖搜索结果概览、商品核心信息、营销属性等维度。本文将拆解通用返回结构、核心字段含义、多场景示例及解析要点,为开发对接提供完整参考。

一、通用返回数据结构(成功 / 失败统一规范)

淘宝开放平台搜索类 API 遵循统一响应格式,分为成功响应失败响应,便于开发者封装通用解析逻辑。

1. 成功响应通用格式(以 taobao.tbk.item.search 为例)

json

复制代码
{
  "code": 0,
  "msg": "success",
  "request_id": "20250520163000123456789",
  "resp_data": {
    "tbk_item_search_response": {
      "total_results": 15600,
      "page_size": 20,
      "page_no": 1,
      "max_page": 780,
      "results": [
        {
          // 单商品核心数据
        }
      ],
      "request_id": "20250520163000123456789"
    }
  }
}

顶层关键字段说明

字段名 含义 核心用途
code 状态码,0= 成功,非 0 = 失败 快速判断请求是否成功
request_id 全局请求唯一标识 接口调用问题排查
resp_data.tbk_item_search_response 业务响应体 接口名 + _response 固定命名
total_results 搜索结果总条数 分页逻辑计算(总页数 = 总条数 / 页大小)
page_size/page_no 每页条数 / 当前页码 分页请求参数校验
results 商品数据数组 核心业务数据载体

2. 失败响应通用格式

json

复制代码
{
  "code": 40,
  "msg": "error",
  "request_id": "20250520163000123456789",
  "resp_data": {
    "error_response": {
      "code": 40,
      "msg": "签名错误",
      "sub_code": "isv.invalid-sign",
      "sub_msg": "签名参数不正确,请检查参数排序和加密逻辑"
    }
  }
}

错误字段核心价值sub_code 精准定位问题类型(如 isv.api-rate-limit-exceeded 表示接口限流,isv.permission-denied 表示权限不足)。

二、核心接口返回数据解析

淘宝关键词搜索 API 分为淘宝客通用搜索店铺商品搜索高佣商品搜索等不同类型,核心字段差异集中在营销属性,以下是两类主流接口的详细数据示例。

1. 通用商品搜索接口(taobao.tbk.item.search

适用于关键词全网商品搜索,返回数据涵盖商品基础信息、价格、佣金、销量等核心字段,是最常用的搜索接口。

单商品完整数据示例

json

复制代码
{
  "num_iid": "689712345678",
  "title": "2025夏季纯棉宽松T恤男 透气百搭休闲短袖 抗皱不起球",
  "pict_url": "https://img.alicdn.com/imgextra/i1/234567890/O1CN01abcdefghijklmnop_!!0-item_pic.jpg",
  "small_images": {
    "string": [
      "https://img.alicdn.com/imgextra/i2/234567890/O1CN01qrstuvwxyzabcde_!!0-item_pic.jpg",
      "https://img.alicdn.com/imgextra/i3/234567890/O1CN01fghijklmnopqrst_!!0-item_pic.jpg"
    ]
  },
  "reserve_price": "99.00",
  "zk_final_price": "59.90",
  "user_type": 1,
  "provcity": "浙江杭州",
  "item_url": "https://detail.tmall.com/item.htm?id=689712345678",
  "sales": 12500,
  "volume": 12500,
  "tk_rate": "20.00",
  "commission": "11.98",
  "shop_title": "XX男装旗舰店",
  "shop_id": "12345678",
  "category": "男装",
  "cid": 50010850,
  "is_tmall": true,
  "created_time": "2025-04-01 10:00:00",
  "material_lib_type": 1
}
核心字段分类说明
字段分类 字段名 含义 数据类型 核心用途
商品标识 num_iid 商品唯一 ID 字符串 关联商品详情、评论 API
cid 商品类目 ID 整数 类目筛选、竞品分类
基础信息 title 商品标题 字符串 关键词匹配度分析
pict_url 商品主图链接 字符串 素材展示、图片下载
small_images.string 商品副图数组 数组 商品图文信息采集
item_url 商品详情页链接 字符串 爬虫补全数据入口
价格信息 reserve_price 商品原价 字符串 优惠力度计算(原价 - 券后价)
zk_final_price 券后价 / 成交价 字符串 价格竞争力分析
营销属性 sales/volume 商品销量 整数 爆款判断、市场热度分析
tk_rate 佣金比例 字符串 淘宝客收益计算
commission 佣金金额 字符串 推广收益评估
店铺信息 shop_title 店铺名称 字符串 竞品店铺定位
shop_id 店铺 ID 字符串 店铺商品批量搜索
is_tmall 是否天猫店铺 布尔值 区分天猫 / 淘宝店铺
其他信息 provcity 发货地 字符串 物流时效评估
user_type 卖家类型(1 = 天猫,0 = 淘宝) 整数 is_tmall字段联动校验

2. 店铺商品搜索接口(taobao.item.seller.search

适用于指定店铺内关键词搜索,返回数据在通用字段基础上,新增店铺内商品排序、库存等专属字段。

差异化字段示例

json

复制代码
{
  "num_iid": "689712345678",
  "title": "2025夏季纯棉宽松T恤男",
  "price": "59.90",
  "stock": 5000,
  "seller_cids": "123,456",
  "list_time": "2025-04-01 10:00:00",
  "delist_time": "2026-04-01 10:00:00",
  "shop_type": 1,
  "sort": "sales_desc"
}
专属字段说明
字段名 含义 用途
stock 商品库存 库存预警、供应链分析
seller_cids 店铺内部分类 ID 店铺商品结构分析
list_time/delist_time 上架 / 下架时间 新品监控、商品生命周期分析
sort 店铺内排序方式 店铺运营策略分析(如按销量排序)

三、不同搜索场景返回数据差异

搜索 API 的返回字段会根据搜索条件商品类型动态调整,以下是三类典型场景的差异示例。

1. 按销量排序场景(sort=sales_desc

返回数据中 sales 字段按降序排列,且优先展示高销量商品,部分接口会新增 sales_trend 字段(销量增长趋势)。

json

复制代码
{
  "num_iid": "689712345678",
  "sales": 12500,
  "sales_trend": "up",
  "30day_sales": 5000
}

2. 按价格区间搜索场景(start_price=30&end_price=80

返回商品的 zk_final_price 均在指定区间内,且会新增 price_rank 字段(价格排名)。

json

复制代码
{
  "num_iid": "689712345678",
  "zk_final_price": "59.90",
  "price_rank": 3
}

3. 特殊类目场景(如美妆 / 3C)

  • 美妆类目 :新增 brand(品牌)、function(功效)字段;
  • 3C 类目 :新增 model(型号)、after_sale(售后服务)字段。

json

复制代码
// 美妆类目示例
{
  "num_iid": "987654321012",
  "brand": "XX美妆",
  "function": "保湿、控油"
}

四、数据解析实战示例(Python)

以下是基于 Python 的搜索 API 数据解析示例,包含成功 / 失败判断、核心字段提取、数据格式化三个核心步骤。

python

运行

复制代码
import json

def parse_search_api_response(response_data):
    """
    解析淘宝关键词搜索API返回数据
    :param response_data: API返回的原始JSON字典
    :return: 格式化商品列表 + 搜索元数据(总条数、页码)
    """
    # 1. 判断请求是否成功
    if response_data.get("code") != 0:
        error_info = response_data["resp_data"]["error_response"]
        raise Exception(
            f"API调用失败:{error_info['msg']} "
            f"(错误码:{error_info['code']},子错误码:{error_info['sub_code']})"
        )
    
    # 2. 提取搜索元数据
    search_resp = response_data["resp_data"]["tbk_item_search_response"]
    meta_data = {
        "总条数": search_resp.get("total_results", 0),
        "当前页码": search_resp.get("page_no", 1),
        "每页条数": search_resp.get("page_size", 20),
        "总页数": search_resp.get("max_page", 0)
    }

    # 3. 格式化商品数据
    formatted_items = []
    raw_items = search_resp.get("results", [])
    for item in raw_items:
        formatted = {
            "商品ID": item.get("num_iid"),
            "商品标题": item.get("title"),
            "主图链接": item.get("pict_url"),
            "券后价": float(item.get("zk_final_price", 0)),
            "原价": float(item.get("reserve_price", 0)),
            "销量": item.get("sales", 0),
            "店铺名称": item.get("shop_title"),
            "是否天猫": item.get("is_tmall", False),
            "佣金比例": float(item.get("tk_rate", 0))
        }
        formatted_items.append(formatted)
    
    return meta_data, formatted_items

# 模拟API成功返回数据
mock_success_response = {
    "code": 0,
    "msg": "success",
    "request_id": "20250520163000123456789",
    "resp_data": {
        "tbk_item_search_response": {
            "total_results": 15600,
            "page_size": 20,
            "page_no": 1,
            "max_page": 780,
            "results": [
                {
                    "num_iid": "689712345678",
                    "title": "2025夏季纯棉宽松T恤男",
                    "pict_url": "https://xxx.jpg",
                    "zk_final_price": "59.90",
                    "reserve_price": "99.00",
                    "sales": 12500,
                    "shop_title": "XX男装旗舰店",
                    "is_tmall": True,
                    "tk_rate": "20.00"
                }
            ]
        }
    }
}

# 调用解析函数
try:
    meta, items = parse_search_api_response(mock_success_response)
    print("搜索元数据:", json.dumps(meta, ensure_ascii=False, indent=2))
    print("商品列表:", json.dumps(items, ensure_ascii=False, indent=2))
except Exception as e:
    print("解析失败:", str(e))

五、数据解析与使用注意事项

  1. 字段类型转换 :价格(zk_final_price)、佣金(commission)等字段为字符串格式,需转换为 float 类型后再进行计算,避免精度丢失。
  2. 空值处理small_imagestk_rate 等字段在非淘宝客商品中可能为空,解析时需设置默认值(如空数组、0),避免 KeyError
  3. 分页逻辑 :单页最大返回 100 条数据,超过总页数时接口返回空数组,需通过 total_resultspage_size 计算总页数,循环获取全量数据。
  4. 图片有效期:商品图片链接有效期为 30 天,如需长期存储,建议下载至自有服务器,并替换链接。
  5. 限流适配:搜索 API 有严格的 QPS 限制(普通应用 1 QPS,企业应用 5 QPS),建议将解析后的数据缓存至 Redis/MySQL,减少重复调用。
  6. 权限差异 :部分字段(如 stockcommission)需申请对应权限才能获取,未授权时返回 null,需在开放平台确认权限状态。

六、总结

淘宝关键词搜索 API 返回数据具有结构统一、字段分层、场景适配性强 的特点,核心解析重点在于顶层状态判断商品核心字段提取 。开发者需重点关注 num_iid(关联其他 API)、zk_final_price(价格分析)、sales(爆款判断)等关键字段,同时做好空值处理与分页逻辑设计,才能高效利用搜索数据实现竞品分析、市场洞察、选品决策等电商业务场景。

相关推荐
Seven974 小时前
剑指offer-51、构建乘积数组
java
宵时待雨4 小时前
C语言笔记归纳19:动态内存管理
java·开发语言·算法
Hao_Harrision4 小时前
50天50个小项目 (React19 + Tailwindcss V4) ✨| BackgroundSlider(背景滑块)
前端·typescript·react·vite7·tailwildcss
LRX_1989274 小时前
华为设备配置练习(六)AC 配置
运维·服务器·华为
沉浮yu大海4 小时前
基于SpringBoot3+Java17+Nacos的配置中心和本地配置文件加解密
java·spring cloud·nacos·java17
翼龙云_cloud4 小时前
腾讯云云渠道商:如何利用镜像实现跨云平台迁移?
运维·服务器·云计算·php·腾讯云
一勺菠萝丶4 小时前
Jenkins 中如何给角色分配多个不同名称的项目(Role 权限实战)
java·运维·jenkins
han_hanker4 小时前
springboot 封装的比较好的 统一的返回类型 工具类
java·spring boot·后端
蟑螂恶霸4 小时前
ubuntu 20.04 移除旧版systemback, 安装新版1.8.5, 支持大型ISO镜像
linux·服务器·ubuntu