代码调用淘宝关键词搜索 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 请求→数据解析」的核心流程,即可在任意语言中实现调用。


相关文章
|
4月前
|
JSON 自然语言处理 监控
淘宝关键词搜索与商品详情API接口(JSON数据返回)
通过商品ID(num_iid)获取商品全量信息,包括SKU规格、库存、促销活动、卖家信息、详情页HTML等。
|
20天前
|
存储 算法 BI
xxljob本地运行
本文介绍XXL-JOB分布式任务调度的部署与使用。包含源码获取、数据库导入、服务端配置启动、客户端注册及执行器配置。详细说明各数据表作用、路由策略类型,并演示任务创建、参数设置与执行日志查看,助你快速上手XXL-JOB。
|
4月前
|
存储 缓存 人工智能
《从木偶江湖到活色长安:NPC行为失控的架构级解决方案》
本文聚焦武侠开放世界游戏《江湖余烬》内测时,长安城高NPC密度、高交互场景下的NPC行为崩坏问题—25%的NPC出现动作重复、卡墙、剧情“失忆”等异常,仅在极限场景触发且常规修复无效。文章梳理了“主状态机+子行为树”的NPC技术架构,通过三层排查锁定核心矛盾:主线程卡顿致状态切换时序错乱,内存碎片引发数据串扰,事件总线拥堵形成恶性循环。经“状态协同重构+内存总线优化+监控容灾搭建”的三层解决方案,最终将NPC崩坏率降至0.3%,玩家投诉大幅下降,同步总结出开放世界NPC系统设计的五大核心教训,揭示架构协同稳定性对游戏沉浸感的关键意义。
216 1
|
5月前
|
搜索推荐 数据挖掘 API
【干货满满】阿里妈妈API接口和淘宝联盟的接口有哪些区别
阿里妈妈API覆盖全链路营销,包含广告投放、数据分析及淘宝客推广,适用于品牌商家与营销工具;淘宝联盟API则专注淘宝客业务,提供商品查询、链接生成与佣金结算等功能,适合推广者使用。两者在功能、权限及应用场景上各有侧重。
|
API 数据安全/隐私保护 开发者
淘宝 API:关键词搜商品列表接口,助力商家按价格销量排序分析数据
此接口用于通过关键词搜索淘宝商品列表。首先需在淘宝开放平台注册并创建应用获取API权限,之后利用应用密钥和访问令牌调用接口。请求参数包括关键词、页码、每页数量、排序方式及价格区间等。返回结果含总商品数量及具体商品详情。使用时需注意签名验证及官方文档更新。
|
前端开发 API Docker
前端微服务
前端微服务
505 0
|
JSON 数据挖掘 API
电商信息指南:API接口淘宝关键词、店铺所有商品获取
要获取淘宝关键词商品数据和店铺所有商品的API接口,需先注册淘宝开放平台账号并创建应用,获取API密钥。接着,使用密钥获取访问令牌,详细阅读API文档,构造并发送API请求,解析响应数据。特别地,使用`item_search_shop`接口可获取店铺内所有商品信息。
|
10月前
|
存储 缓存 监控
如何高效爬取天猫商品数据?官方API与非官方接口全解析
本文介绍两种天猫商品数据爬取方案:官方API和非官方接口。官方API合法合规,适合企业长期使用,需申请企业资质;非官方接口适合快速验证需求,但需应对反爬机制。详细内容涵盖开发步骤、Python实现示例、反爬策略、数据解析与存储、注意事项及扩展应用场景。推荐工具链包括Playwright、aiohttp、lxml等。如需进一步帮助,请联系作者。
|
弹性计算 网络安全
快速部署 RAGFlow 社区版
RAGFlow是一个基于深度文档理解的开源RAG(检索增强生成)引擎。当与LLM集成时,它能够提供真实的问答功能,并得到各种复杂格式数据的充分引用的支持。本文介绍如何通过计算巢快速部署 RAGFlow社区版。
快速部署 RAGFlow 社区版
|
Cloud Native Java 关系型数据库
阿里云 PolarDB-X 团队25届实习生招聘
面向2025届毕业生,阿里云PolarDB分布式数据库团队招聘实习生。团队专注极端数据库场景,研发云原生数据库,曾获多项技术奖项。实习期间,你将有机会与业界专家合作,参与前沿技术项目,优秀实习生可直接转正。岗位包括Java、C++、Golang等研发工程师,工作地点在杭州或北京。简历投递至:ximing.yd@alibaba-inc.com。