淘宝通过关键词API获取商品列表的核心操作需结合淘宝开放平台(TOP)的接口规范,以下是分步骤详解及关键注意事项:
一、接口选择与权限获取
接口类型
taobao.item.search:基础商品搜索接口,支持关键词、类目、价格区间等条件。
taobao.tbk.item.get(淘宝客API):适用于推广场景,返回商品佣金信息。
taobao.items.onsale.get:获取指定店铺的在售商品(需店铺ID)。
权限申请
注册淘宝开放平台账号,创建应用并申请接口权限。
部分接口需高级权限(如商品搜索),需提交资质审核。
二、接口调用流程
1. 请求参数构造
以taobao.item.search为例,核心参数:
json
{
"method":"taobao.item.search",
"app_key":"你的AppKey",
"timestamp":"2025-06-20 10:00:00",
"sign_method":"md5",
"v":"2.0",
"q":"手机",// 关键词(必填)
"page_no":1,// 页码(可选,默认1)
"page_size":40,// 每页数量(可选,默认40)
"sort":"sale-desc",// 排序方式(可选,如销量降序)
"start_price":1000,// 最低价(可选)
"end_price":5000// 最高价(可选)
}
2. 签名生成
按淘宝签名规则,将参数按字典序排序后拼接密钥,生成MD5签名:
python
importhashlib
defgenerate_sign(params, app_secret):
sorted_params =sorted(params.items(), key=lambdax: x[0])
string_to_sign = app_secret +''.join([f"{k}{v}"fork, vinsorted_params]) + app_secret
returnhashlib.md5(string_to_sign.encode()).hexdigest().upper()
3. 发送HTTP请求
使用requests库发送GET请求:
python
importrequests
url ="https://eco.taobao.com/router/rest"
params = {
"method":"taobao.item.search",
"app_key":"你的AppKey",
"timestamp":"2025-06-20 10:00:00",
"v":"2.0",
"q":"手机",
"page_no":1,
"page_size":40
}
params["sign"] = generate_sign(params,"你的AppSecret")
response = requests.get(url, params=params)
print(response.json())
三、响应数据解析
成功响应示例:
json
{
"item_search_response":{
"total_results":1234,
"items":{
"item":[
{
"num_iid":123456789,
"title":"iPhone 15 Pro",
"price":"8999",
"pic_url":"https://img.alicdn.com/xxx.jpg",
"nick":"苹果官方旗舰店",
"volume":1000// 销量
}
]
}
}
}
四、关键注意事项
频率限制
淘宝API有调用频率限制(如每秒10次),超限需申请提高配额或使用缓存。
数据时效性
商品价格、库存可能实时变化,需结合业务场景处理(如缓存+定时刷新)。
错误处理
常见错误码:isv.invalid-parameter(参数错误)、isv.out-of-service(服务不可用)。
需实现重试机制和日志记录。
字段权限
部分字段(如佣金比例)需淘宝客API权限,需在申请时明确。
合规性
禁止爬虫行为,所有请求需通过API密钥签名验证。
五、高级应用场景
分页与大数据量处理
通过page_no和page_size分页获取,结合total_results计算总页数。
多条件组合
示例:搜索“华为手机”,价格区间2000-4000,按销量排序:
python
params = {
"q":"华为手机",
"start_price":2000,
"end_price":4000,
"sort":"sale-desc"
}
接口联动
获取商品ID后,可调用taobao.item.get获取详情(如SKU、描述)。
六、代码示例(完整流程)
python
importrequests
importhashlib
importtime
classTaobaoAPI:
def__init__(self, app_key, app_secret):
self.app_key = app_key
self.app_secret = app_secret
self.base_url ="https://eco.taobao.com/router/rest"
defgenerate_sign(self, params):
sorted_params =sorted(params.items(), key=lambdax: x[0])
string_to_sign =self.app_secret +''.join([f"{k}{v}"fork, vinsorted_params]) +self.app_secret
returnhashlib.md5(string_to_sign.encode()).hexdigest().upper()
defsearch_items(self, keyword, page_no=1, page_size=40):
params = {
"method":"taobao.item.search",
"app_key":self.app_key,
"timestamp": time.strftime("%Y-%m-%d %H:%M:%S"),
"v":"2.0",
"q": keyword,
"page_no": page_no,
"page_size": page_size
}
params["sign"] =self.generate_sign(params)
response = requests.get(self.base_url, params=params)
returnresponse.json()
# 使用示例
api = TaobaoAPI("你的AppKey","你的AppSecret")
result = api.search_items("手机", page_no=1, page_size=10)
print(result)
通过以上步骤,可实现淘宝商品列表的关键词搜索。建议结合业务需求优化分页、排序和错误处理逻辑,并定期关注淘宝开放平台的接口文档更新。