代码调用淘宝关键词搜索 API 全教程(以 Python 为例)

简介: 淘宝关键词搜索 API(核心接口:taobao.tbk.item.search)是实现商品搜索、市场分析的核心工具,调用需完成「参数构造→签名生成→HTTP 请求→数据解析」全流程。以下是基于 Python 的完整调用教程,含通用代码、参数说明、避坑要点,适配新手快速上手。

淘宝关键词搜索 API(核心接口:taobao.tbk.item.search)是实现商品搜索、市场分析的核心工具,调用需完成「参数构造→签名生成→HTTP 请求→数据解析」全流程。以下是基于 Python 的完整调用教程,含通用代码、参数说明、避坑要点,适配新手快速上手。

一、前置准备

1. 核心信息获取

调用前需先在淘宝开放平台完成:

  • 联系博主,企业 / 个人实名认证,创建应用并获取 App KeyApp Secret(接口调用的身份凭证);
  • 申请 taobao.tbk.item.search 接口权限(审核周期 1-3 个工作日);
  • 确认接口请求地址:固定为 https://eco.taobao.com/router/rest

2. 环境依赖

安装必备 Python 库(仅需请求库):

bash

运行

pip install requests

二、完整调用代码(可直接复用)

以下代码包含「签名生成、参数构造、接口调用、数据解析」全逻辑,适配绝大多数搜索场景:

python

运行

import requests
import hashlib
import time
import json
class TaobaoSearchAPI:
    """淘宝关键词搜索API调用类"""
    def __init__(self, app_key, app_secret):
        self.app_key = app_key
        self.app_secret = app_secret
        self.api_url = "https://eco.taobao.com/router/rest"  # 官方固定地址
    def _generate_sign(self, params):
        """
        生成淘宝API签名(核心步骤,签名错误会直接调用失败)
        :param params: 接口请求参数(字典)
        :return: 加密后的签名字符串
        """
        # 1. 按参数名ASCII升序排序
        sorted_params = sorted(params.items(), key=lambda x: x[0])
        # 2. 拼接参数字符串(key+value)
        sign_str = ""
        for k, v in sorted_params:
            # 过滤空值,避免签名错误
            if v is not None and v != "":
                sign_str += f"{k}{v}"
        # 3. 首尾拼接App Secret,MD5加密后转大写
        sign_str = self.app_secret + sign_str + self.app_secret
        sign = hashlib.md5(sign_str.encode("utf-8")).hexdigest().upper()
        return sign
    def search(self, keyword, page_no=1, page_size=20, sort="sales_desc", start_price=None, end_price=None):
        """
        调用关键词搜索API
        :param keyword: 搜索关键词(必填,如"夏季纯棉T恤")
        :param page_no: 页码,默认1(最大不超过总页数)
        :param page_size: 每页条数,默认20(最大100)
        :param sort: 排序方式,sales_desc=按销量降序,price_asc=按价格升序
        :param start_price: 价格区间下限(如30)
        :param end_price: 价格区间上限(如100)
        :return: 解析后的商品数据 + 搜索元信息(总条数、页码)
        """
        # 1. 构造基础参数(淘宝API固定要求)
        params = {
            "method": "taobao.tbk.item.search",  # 接口名,固定值
            "app_key": self.app_key,
            "timestamp": time.strftime("%Y-%m-%d %H:%M:%S"),  # 时间戳(误差≤5分钟)
            "format": "json",  # 返回格式,固定json
            "v": "2.0",  # API版本,固定2.0
            "sign_method": "md5",  # 签名方式,固定md5
            "q": keyword,  # 搜索关键词
            "page_no": page_no,
            "page_size": page_size,
            "sort": sort
        }
        # 2. 可选参数:价格区间(按需添加)
        if start_price:
            params["start_price"] = start_price
        if end_price:
            params["end_price"] = end_price
        # 3. 生成签名并添加到参数
        params["sign"] = self._generate_sign(params)
        # 4. 发起GET请求(淘宝API仅支持GET)
        try:
            response = requests.get(
                url=self.api_url,
                params=params,
                timeout=10  # 超时时间,避免卡请求
            )
            response.encoding = "utf-8"
            result = response.json()
        except Exception as e:
            raise Exception(f"接口请求失败:{str(e)}")
        # 5. 解析返回数据
        if result.get("code") != 0:
            # 调用失败,提取错误信息
            error = result["resp_data"]["error_response"]
            raise Exception(f"API调用失败:{error['msg']}(错误码:{error['sub_code']})")
        else:
            # 调用成功,格式化数据
            data = result["resp_data"]["tbk_item_search_response"]
            meta = {
                "总商品数": data.get("total_results", 0),
                "当前页码": data.get("page_no", 1),
                "每页条数": data.get("page_size", 20),
                "总页数": data.get("max_page", 0)
            }
            # 提取核心商品信息
            goods_list = []
            for item in data.get("results", []):
                goods_list.append({
                    "商品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)) / 100,  # 转小数(如20%→0.2)
                    "商品链接": item.get("item_url")
                })
            return meta, goods_list
# ==================== 调用示例 ====================
if __name__ == "__main__":
    # 替换为你的App Key和App Secret
    APP_KEY = "你的App Key"
    APP_SECRET = "你的App Secret"
    
    # 初始化API调用类
    taobao_api = TaobaoSearchAPI(APP_KEY, APP_SECRET)
    
    # 调用搜索接口(搜索"夏季纯棉T恤",按销量排序,价格30-100元)
    try:
        meta_info, goods_data = taobao_api.search(
            keyword="夏季纯棉T恤",
            page_no=1,
            page_size=20,
            sort="sales_desc",
            start_price=30,
            end_price=100
        )
        # 打印结果
        print("=== 搜索元信息 ===")
        print(json.dumps(meta_info, ensure_ascii=False, indent=2))
        print("\n=== 商品列表(前3条)===")
        print(json.dumps(goods_data[:3], ensure_ascii=False, indent=2))
    except Exception as e:
        print(f"调用失败:{str(e)}")

三、关键参数说明

参数名 是否必填 说明 示例
q 搜索关键词(需 URL 编码,代码已自动处理) "夏季纯棉 T 恤"
page_no 页码,默认 1 2
page_size 每页条数,默认 20,最大 100 50
sort 排序方式 sales_desc(销量降序)、price_asc(价格升序)
start_price/end_price 价格区间 start_price=30,end_price=100
is_tmall 是否仅搜天猫商品 true(仅天猫)、false(全部)

四、调用结果示例

成功调用后返回格式化数据,示例如下:

json

=== 搜索元信息 ===
{
  "总商品数": 15600,
  "当前页码": 1,
  "每页条数": 20,
  "总页数": 780
}
=== 商品列表(前3条)===
[
  {
    "商品ID": "689712345678",
    "标题": "2025夏季纯棉宽松T恤男 透气百搭休闲短袖",
    "主图链接": "https://img.alicdn.com/xxx.jpg",
    "券后价": 59.9,
    "原价": 99.0,
    "销量": 12500,
    "店铺名称": "XX男装旗舰店",
    "是否天猫": true,
    "佣金比例": 0.2,
    "商品链接": "https://detail.tmall.com/item.htm?id=689712345678"
  }
]

五、避坑核心要点

1. 签名错误(最常见问题)

  • 确保参数按 ASCII 升序排序(不是中文拼音排序);
  • 时间戳格式必须为 YYYY-MM-DD HH:mm:ss,且与服务器时间误差≤5 分钟;
  • 拼接签名时 过滤空值(如 start_price 未传则不参与签名);
  • App Secret 首尾拼接,加密后转 大写(小写会判定签名错误)。

2. 限流与权限问题

  • 普通应用 QPS 限制为 1(每秒最多 1 次调用),批量调用需加延迟:
    运行
time.sleep(1)  # 每次调用后休眠1秒
  • 未申请接口权限会返回 isv.permission-denied 错误,需在开放平台确认权限审核状态;
  • 个人账号每日调用配额有限(约 100 次),企业账号配额更高(1 万次 / 天)。

3. 数据解析注意事项

  • 价格、佣金等字段返回为字符串,需转 float 后计算;
  • 分页调用时,总页数 = 总商品数 / 每页条数,超过总页数会返回空列表;
  • 部分字段(如 stock 库存)需额外申请权限,未授权时返回 null

六、扩展场景适配

1. 批量分页获取全量数据

python

运行

# 循环获取前5页数据
all_goods = []
for page in range(1, 6):
    meta, goods = taobao_api.search(keyword="夏季纯棉T恤", page_no=page)
    all_goods.extend(goods)
    time.sleep(1)  # 避免限流
print(f"共获取 {len(all_goods)} 条商品数据")

2. 仅搜索天猫商品

python

运行

meta, goods = taobao_api.search(
    keyword="夏季纯棉T恤",
    is_tmall=True  # 新增该参数,仅返回天猫商品
)

七、其他语言适配思路

核心逻辑与 Python 一致,仅需调整语法:

  • Java:用 TreeMap 排序参数,MessageDigest 生成 MD5 签名,OkHttp 发起 GET 请求;
  • Go:用 url.Values 构造参数,sort.Strings 排序,crypto/md5 加密;
  • Node.js:用 axios 发起请求,Object.keys().sort() 排序参数,crypto.createHash 生成签名。

只要遵循「参数排序→签名生成→GET 请求→数据解析」的核心流程,即可在任意语言中实现调用。


相关文章
|
10月前
|
JSON 数据安全/隐私保护 开发者
淘宝 item_search 接口对接全攻略:从入门到精通
本文详解淘宝开放平台item_search接口的对接流程与实战技巧,涵盖参数配置、签名生成、Python调用示例、分页处理、错误调试及最佳实践,助开发者快速构建合规高效的商品搜索功能。
|
6月前
|
XML JSON API
淘宝商品详情API(tb.item_get)
本文详解淘宝开放平台商品详情核心API(如item_get),涵盖对接流程、权限申请、请求规范、参数说明及返回字段,并列举代购集运、选品分析、比价导购等典型应用场景,助力开发者合规高效获取商品数据。(239字)
|
6月前
|
数据采集 监控 API
合法获取淘宝商品数据:通过淘宝开放平台API的实践指南
本文介绍通过淘宝开放平台官方API合法获取商品数据的完整流程,强调禁止爬虫、遵守协议,确保合规调用商品详情、搜索等接口,规避法律与封号风险。
|
3月前
|
数据采集 监控 API
淘宝店铺所有商品 API 接口全解析:批量获取全店商品数据(2026 最新版)
在电商数据采集与店铺管理场景中,批量获取淘宝店铺所有商品是核心需求之一。淘宝开放平台提供了标准化 API 接口,支持按店铺、类目、时间等维度拉取商品全量数据,涵盖标题、价格、SKU、库存、销量等关键字段。本文将从接口选型、参数配置、代码实现、数据解析全流程展开讲解,适用于店铺运营、ERP 系统对接、竞品分析等场景。
|
4月前
|
监控 安全 数据挖掘
好用的电商API接口推荐(技术员实操版)
作为技术员,“好用”的电商API核心标准是:合规稳定、接入便捷、响应高效、成本可控,无需冗余功能,能精准匹配业务场景、降低开发运维成本。以下按「核心场景」分类,推荐主流、靠谱的电商API接口,涵盖官方接口和优质第三方接口,附技术层面的核心优势,可直接对照选型、对接开发。
|
6月前
|
JSON 算法 API
淘宝商品列表 API 使用指南
淘宝商品列表API(taobao.items.search)支持按关键词、价格、销量等条件检索商品,返回商品ID、标题、价格等结构化数据,适用于比价、市场分析。需注册开放平台、获取AppKey/AppSecret并实名认证。接口限100次/秒,建议先测沙箱。请求含基础参数与筛选条件,签名通过MD5加密生成。
|
9月前
|
JSON API 数据格式
阿里妈妈 item_search 接口对接全攻略:从入门到精通
阿里妈妈item_search接口(taobao.tbk.item.search)是淘宝客选品与推广核心工具,支持关键词、类目、价格等多维度筛选,返回商品信息及佣金、优惠券、推广链接等关键数据,适用于选品分析、推广平台搭建等场景。本文详解接口对接流程、参数配置、Python代码实现、分页策略与合规要点,助开发者高效构建“搜索-推广-变现”闭环系统,实现精准营销与稳定收益。
|
6月前
|
数据采集 自然语言处理 API
淘宝搜索API:长尾词挖掘,SEO提升的利器!
在淘宝生态中,长尾关键词因意图明确、竞争小、转化高,成为中小卖家突破流量瓶颈的关键。本文详解如何利用淘宝搜索API,结合种子词挖掘、数据清洗与分词统计,高效提取“透气男鞋”等高潜力长尾词,并通过标题优化、属性布局及直通车应用提升SEO效果,实现精准引流与转化增长。
|
缓存 JSON API
淘宝关键词搜索 API 接口详解与示例
淘宝关键词搜索API(taobao.items.search)助力开发者高效获取商品数据,支持分页、筛选与排序。本文详解接口调用流程、签名机制及Python实现,涵盖权限申请、代码示例与常见问题解决方案,助你快速构建电商应用。
|
10月前
|
JSON 自然语言处理 监控
淘宝关键词搜索与商品详情API接口(JSON数据返回)
通过商品ID(num_iid)获取商品全量信息,包括SKU规格、库存、促销活动、卖家信息、详情页HTML等。