淘宝关键词搜索 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(爆款判断)等关键字段,同时做好空值处理与分页逻辑设计,才能高效利用搜索数据实现竞品分析、市场洞察、选品决策等电商业务场景。

相关推荐
曹牧2 小时前
Spring Boot:如何测试Java Controller中的POST请求?
java·开发语言
passerby60612 小时前
完成前端时间处理的另一块版图
前端·github·web components
掘了2 小时前
「2025 年终总结」在所有失去的人中,我最怀念我自己
前端·后端·年终总结
崔庆才丨静觅2 小时前
实用免费的 Short URL 短链接 API 对接说明
前端
崔庆才丨静觅2 小时前
5分钟快速搭建 AI 平台并用它赚钱!
前端
爬山算法2 小时前
Hibernate(90)如何在故障注入测试中使用Hibernate?
java·后端·hibernate
七夜zippoe2 小时前
CANN Runtime任务描述序列化与持久化源码深度解码
大数据·运维·服务器·cann
盟接之桥3 小时前
盟接之桥说制造:引流品 × 利润品,全球电商平台高效产品组合策略(供讨论)
大数据·linux·服务器·网络·人工智能·制造
kfyty7253 小时前
集成 spring-ai 2.x 实践中遇到的一些问题及解决方案
java·人工智能·spring-ai
猫头虎3 小时前
如何排查并解决项目启动时报错Error encountered while processing: java.io.IOException: closed 的问题
java·开发语言·jvm·spring boot·python·开源·maven