淘宝关键词接口 item_search 批量获取商品信息实战指南

402
Category: 
开发交流

一、整体流程一览
步骤 动作 耗时
① 注册认证 淘宝开放平台 → 实名认证 1-3个工作日
② 创建应用 获取 App Key / App Secret 即时
③ 申请权限 申请 taobao.items.search 等接口 1-2个工作日
④ 调接口 签名 → 请求 → 解析 → 存储 按需
二、接口选择
接口 适用场景 核心字段 频率限制
taobao.items.search 关键词搜商品、竞品监控 num_iid, title, price, pic_url, volume 免费500次/天,企业10万次/天
taobao.tbk.item.get 淘宝客推广、查优惠券/佣金 zk_final_price(折后价), tk_rate(佣金), coupon_info 约5000次/天
taobao.item.search_shop 按店铺拉全量商品 同上 + shop_id 同上
本文主力演示 taobao.items.search(关键词搜索)。

三、签名机制(最核心,错了必报错)
淘宝 API 采用 MD5 签名,规则如下:

签名串 = AppSecret + 按ASCII升序拼接(key1value1key2value2...) + AppSecret
sign = MD5(签名串).toUpperCase()
签名步骤拆解:

收集所有参数(排除 sign 本身)
按参数名 ASCII 码升序排序
拼接为 key1value1key2value2...(无分隔符)
首尾各追加 AppSecret
MD5 加密 → 转大写
python
import hashlib

def generate_sign(params: dict, app_secret: str) -> str:
sorted_params = sorted(params.items(), key=lambda x: x[0])
param_str = app_secret + ''.join(f"{k}{v}" for k, v in sorted_params if k != 'sign') + app_secret
return hashlib.md5(param_str.encode('utf-8')).hexdigest().upper()
四、完整 Python 实战代码
python
import requests
import hashlib
import time
from datetime import datetime

class TaobaoAPI:
def init(self, app_key: str, app_secret: str):
self.app_key = app_key
self.app_secret = app_secret
self.base_url = "https://gw.api.taobao.com/router/rest"

def generate_sign(self, params: dict) -> str:
    sorted_params = sorted(params.items(), key=lambda x: x[0])
    param_str = self.app_secret + ''.join(
        f"{k}{v}" for k, v in sorted_params if k != 'sign'
    ) + self.app_secret
    return hashlib.md5(param_str.encode('utf-8')).hexdigest().upper()

def search_items(self, keyword: str, page_no: int = 1, page_size: int = 50,
                 fields: str = None) -> dict:
    """单页搜索"""
    timestamp = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
    params = {
        "app_key": self.app_key,
        "method": "taobao.items.search",
        "timestamp": timestamp,
        "format": "json",
        "v": "2.0",
        "sign_method": "md5",
        "q": keyword,
        "page_no": str(page_no),
        "page_size": str(page_size),
    }
    if fields:
        params["fields"] = fields  # 如: num_iid,title,pict_url,price,volume
    params["sign"] = self.generate_sign(params)

    response = requests.get(self.base_url, params=params, timeout=10)
    return response.json()

def batch_fetch(self, keyword: str, max_pages: int = 10, page_size: int = 50) -> list:
    """批量多页获取"""
    all_items = []
    for page in range(1, max_pages + 1):
        print(f"
Comments 0
/ 1000
0
0
Favorite