下面给你一套可直接运行的淘宝 API Python 调用 + 解析 + 数据反馈参考,以最常用的 ** 商品详情(taobao.item.get)和商品搜索(taobao.item.search)** 为例,包含完整签名、请求、JSON 返回、解析代码与字段说明。
一、前置准备
- 注册淘宝开放平台 → 创建应用 → 获取 AppKey / AppSecret
- 安装依赖
bash
运行
pip install requests pycryptodome
- 网关地址:
二、Python 调用与解析完整代码(通用版)
1. 签名工具(必须)
python
运行
import hashlib import requests import json from datetime import datetime def generate_sign(params, app_secret): """生成淘宝API签名(MD5)""" sorted_params = sorted(params.items(), key=lambda x: x[0]) query = ''.join([f"{k}{v}" for k, v in sorted_params]) sign_str = app_secret + query + app_secret return hashlib.md5(sign_str.encode('utf-8')).hexdigest().upper() def call_taobao_api(method, app_key, app_secret, biz_params): """通用淘宝API调用函数""" base_url = "https://gw.api.taobao.com/router/rest" public_params = { "method": method, "app_key": app_key, "timestamp": datetime.now().strftime("%Y-%m-%d %H:%M:%S"), "format": "json", "v": "2.0", "sign_method": "md5" } all_params = {**public_params, **biz_params} all_params["sign"] = generate_sign(all_params, app_secret) try: resp = requests.post(base_url, data=all_params, timeout=10) resp.raise_for_status() return resp.json() except Exception as e: print(f"请求失败: {e}") return None
三、示例 1:商品详情(taobao.item.get)
1. 调用代码
python
运行
# 配置 APP_KEY = "你的AppKey" APP_SECRET = "你的AppSecret" NUM_IID = "650088223456" # 商品ID # 业务参数 biz_params = { "num_iid": NUM_IID, "fields": "num_iid,title,price,original_price,pic_url,volume,location,skus,detail_url" } # 调用API result = call_taobao_api("taobao.item.get", APP_KEY, APP_SECRET, biz_params)
2. 标准 JSON 返回(简化)
json
{ "item_get_response": { "item": { "num_iid": "650088223456", "title": "2025新款智能手表 高清大屏 运动健康监测", "price": "1299.00", "original_price": "1599.00", "pic_url": "https://img.alicdn.com/bao/uploaded/i1/xxx.jpg", "volume": "2000", "location": { "city": "深圳", "state": "广东" }, "detail_url": "https://item.taobao.com/item.htm?id=650088223456", "skus": [ { "sku_id": "123456789", "price": "1299.00", "stock": 150, "properties_name": "颜色:黑色;尺寸:42mm" }, { "sku_id": "123456790", "price": "1399.00", "stock": 80, "properties_name": "颜色:银色;尺寸:46mm" } ] }, "request_id": "abc123xyz" } }
3. Python 解析代码
python
运行
def parse_item_detail(json_data): """解析商品详情""" if "error_response" in json_data: print(f"错误: {json_data['error_response']['msg']}") return None item = json_data["item_get_response"]["item"] parsed = { "商品ID": item["num_iid"], "标题": item["title"], "售价": float(item["price"]), "原价": float(item.get("original_price", 0)), "主图": item["pic_url"], "销量": int(item["volume"]), "发货地": f"{item['location']['state']} {item['location']['city']}", "商品链接": item["detail_url"], "SKU列表": [] } for sku in item.get("skus", []): parsed["SKU列表"].append({ "SKU_ID": sku["sku_id"], "规格": sku["properties_name"], "价格": float(sku["price"]), "库存": sku["stock"] }) return parsed # 解析并打印 if result: item_detail = parse_item_detail(result) print(json.dumps(item_detail, indent=2, ensure_ascii=False))
四、示例 2:商品搜索(taobao.item.search)
1. 调用代码
python
运行
biz_params = { "q": "智能手表", "page_no": "1", "page_size": "20", "fields": "num_iid,title,price,pic_url,volume,provcity" } result = call_taobao_api("taobao.item.search", APP_KEY, APP_SECRET, biz_params)
2. JSON 返回(简化)
json
{ "item_search_response": { "items": { "item": [ { "num_iid": "650088223456", "title": "2025新款智能手表 高清大屏", "price": "1299.00", "pic_url": "https://img.alicdn.com/xxx.jpg", "volume": "2000", "provcity": "广东 深圳" }, { "num_iid": "650088223457", "title": "运动智能手表 心率监测", "price": "899.00", "pic_url": "https://img.alicdn.com/yyy.jpg", "volume": "1500", "provcity": "浙江 杭州" } ] }, "total_results": 1000, "request_id": "def456uvw" } }
3. 解析代码
python
运行
def parse_item_search(json_data): """解析商品搜索结果""" if "error_response" in json_data: print(f"错误: {json_data['error_response']['msg']}") return None items = json_data["item_search_response"]["items"]["item"] parsed_list = [] for item in items: parsed_list.append({ "商品ID": item["num_iid"], "标题": item["title"], "价格": float(item["price"]), "主图": item["pic_url"], "销量": int(item["volume"]), "发货地": item["provcity"] }) return parsed_list # 解析 if result: search_result = parse_item_search(result) print(f"搜索到 {len(search_result)} 个商品") print(json.dumps(search_result[:2], indent=2, ensure_ascii=False))
五、常见错误返回(必须处理)
json
{ "error_response": { "code": 10001, "msg": "Invalid signature", "sub_code": "isv.sign-invalid", "sub_msg": "签名无效" } }
- 10001:签名错误(检查排序 / 拼接 / 密钥)
- 40004:缺少必填参数
- 40006:权限不足(未开通接口)
- 50000:服务器异常
六、核心字段说明(常用)
表格
| 字段 | 含义 | 类型 |
| num_iid | 商品 ID | string |
| title | 商品标题 | string |
| price | 售价 | string(需转 float) |
| original_price | 原价 | string |
| pic_url | 主图 | string |
| volume | 销量 | string(需转 int) |
| skus | SKU 列表 | array |
| location | 发货地 | object |
| provcity | 发货地(省 + 市) | string |