淘宝/天猫API系列-商品列表页采集接口教程
淘宝/天猫商品列表页采集接口教程(官方API方案)
一、前期准备
- 注册开发者账号
- 访问淘宝开放平台/万邦开放平台,完成企业开发者认证(个人账号权限受限)。
- 填写企业信息、联系方式等,提交后等待审核(约1-3个工作日)。
- 创建应用并获取密钥
- 登录开放平台,进入“控制台” → “我的应用” → “创建应用”。
- 填写应用名称、描述(如“商品列表采集工具”),选择应用类型(如“自用型”)。
- 提交后,在“应用管理”中查看
App Key
和App Secret
,务必妥善保管。
- 申请API权限
- 在“API权限管理”中申请以下接口权限:
taobao.items.search
(商品搜索)taobao.item.get
(商品详情)taobao.traderate.items.get
(店铺商品列表,需店铺授权)
- 填写使用场景(如“商品数据分析”),等待审核通过。
- 在“API权限管理”中申请以下接口权限:
二、接口调用流程
- 生成签名(Sign)
- 淘宝API要求所有请求必须签名,防止请求被篡改。
- 签名步骤:
- 将所有请求参数(包括公共参数和业务参数)按参数名的字典序排序。
- 将排序后的参数拼接成字符串,并在末尾追加
App Secret
。 - 对拼接后的字符串进行MD5加密,生成签名。
- Python示例:
python
import hashlib
import time
def generate_sign(params, app_secret):
sorted_params = sorted(params.items())
sign_str = ''.join([f'{k}{v}' for k, v in sorted_params]) + app_secret
return hashlib.md5(sign_str.encode('utf-8')).hexdigest().upper()
# 示例参数
params = {
'method': 'taobao.items.search',
'app_key': 'your_app_key',
'timestamp': int(time.time()),
'v': '2.0',
'format': 'json',
'q': '手机', # 搜索关键词
'page_no': 1, # 页码
'page_size': 40, # 每页数量
}
params['sign'] = generate_sign(params, 'your_app_secret')
- 发送HTTP请求
- 淘宝API支持GET和POST请求,推荐使用GET方式。
- 请求URL示例:
https://eco.taobao.com/router/rest?method=taobao.items.search&app_key=your_app_key×tamp=1718443876&v=2.0&format=json&q=手机&page_no=1&page_size=40&sign=YOUR_GENERATED_SIGN
- Python代码示例:
python
import requests
response = requests.get('https://eco.taobao.com/router/rest', params=params)
if response.status_code == 200:
data = response.json()
print(data)
else:
print(f"请求失败,状态码:{response.status_code}")
- 解析响应数据
- 淘宝API返回的数据通常为JSON格式,包含商品列表、分页信息等。
- 示例响应结构:
json
{
"items_search_response": {
"total_results": 1000,
"items": {
"item": [
{
"num_iid": "123456789",
"title": "手机型号A",
"price": "2999.00",
"pic_url": "https://example.com/image.jpg",
"volume": 1000
},
{...}
]
}
}
}
- 提取所需字段(如商品ID、标题、价格、销量等)进行后续处理。
三、高级功能与优化
- 分页查询
- 通过调整
page_no
和page_size
参数实现分页。 - 示例:获取第2页,每页50条数据:
python
params['page_no'] = 2
params['page_size'] = 50
- 通过调整
- 筛选条件
- 支持按价格区间、销量排序等筛选:
start_price
和end_price
:价格范围。sort
:排序方式(如price_desc
按价格降序)。
- 示例:搜索价格在1000-3000元的手机,按销量降序:
python
params.update({
'start_price': '1000',
'end_price': '3000',
'sort': 'volume_desc'
})
- 支持按价格区间、销量排序等筛选:
- 性能优化
- 缓存策略:对频繁请求的数据(如热门商品)进行缓存,减少API调用次数。
- 限流处理:淘宝API有调用频率限制(如每分钟500次),需合理控制请求间隔。
- 错误重试:对网络异常或API限流的情况,添加重试机制。
四、注意事项
- 合规性
- 严格遵守淘宝开放平台的使用规则,不得滥用API。
- 不得将采集的数据用于非法用途(如侵犯隐私、不正当竞争)。
- 数据安全
- 妥善保管
App Key
和App Secret
,避免泄露。 - 对敏感数据进行脱敏处理。
- 妥善保管
- 接口更新
- 淘宝API文档会不定期更新,需定期查阅最新文档,了解接口变化。
五、完整代码示例
python
import requests | |
import hashlib | |
import time | |
def generate_sign(params, app_secret): | |
sorted_params = sorted(params.items()) | |
sign_str = ''.join([f'{k}{v}' for k, v in sorted_params]) + app_secret | |
return hashlib.md5(sign_str.encode('utf-8')).hexdigest().upper() | |
def search_products(keyword, page=1, page_size=40): | |
params = { | |
'method': 'taobao.items.search', | |
'app_key': 'your_app_key', | |
'timestamp': int(time.time()), | |
'v': '2.0', | |
'format': 'json', | |
'q': keyword, | |
'page_no': page, | |
'page_size': page_size, | |
} | |
params['sign'] = generate_sign(params, 'your_app_secret') | |
response = requests.get('https://eco.taobao.com/router/rest', params=params) | |
if response.status_code == 200: | |
data = response.json() | |
if 'items_search_response' in data: | |
items = data['items_search_response']['items']['item'] | |
for item in items: | |
print(f"商品ID: {item['num_iid']}, 标题: {item['title']}, 价格: {item['price']}, 销量: {item['volume']}") | |
else: | |
print("未找到商品数据") | |
else: | |
print(f"请求失败,状态码:{response.status_code}") | |
if __name__ == "__main__": | |
search_products('手机') |
总结
通过淘宝开放平台的官方API,可以合法、稳定地采集商品列表页数据。关键步骤包括:注册开发者账号、创建应用、申请API权限、生成签名、发送请求并解析响应数据。同时,需注意合规性、数据安全和接口更新,确保采集过程的稳定性和可靠性。