以下是關(guān)于使用淘寶API批量獲取商品信息的實(shí)戰(zhàn)指南,涵蓋技術(shù)實(shí)現(xiàn)與注意事項(xiàng):
一、準(zhǔn)備工作
- 注冊淘寶開放平臺賬號
- 訪問淘寶開放平臺/萬邦開放平臺
- 完成企業(yè)/個人開發(fā)者認(rèn)證(需營業(yè)執(zhí)照或個人身份證)
- 創(chuàng)建應(yīng)用獲取權(quán)限
- 進(jìn)入「控制臺」→「應(yīng)用管理」→「創(chuàng)建應(yīng)用」
- 必選API權(quán)限:
- 淘寶客-商品查詢(taobao.tbk.item.get)
- 商品搜索(taobao.items.search)
- 提交審核后獲取:
- AppKey(應(yīng)用標(biāo)識)
- AppSecret(應(yīng)用密鑰)
- 環(huán)境要求python
pip install requests |
pip install hashlib |
二、API調(diào)用核心代碼(Python示例)
python
import requests |
import hashlib |
import time |
import urllib.parse |
class TaobaoAPI: |
def __init__(self, appkey, appsecret): |
self.appkey = appkey |
self.appsecret = appsecret |
self.base_url = "https://eco.taobao.com/router/rest" |
def generate_sign(self, params): |
sorted_params = sorted(params.items()) |
query_string = ''.join([f"{k}{v}" for k, v in sorted_params if v != '']) |
raw = self.appsecret + query_string + self.appsecret |
return hashlib.md5(raw.encode('utf-8')).hexdigest().upper() |
def call_api(self, method, fields): |
timestamp = str(int(time.time())) |
params = { |
'method': method, |
'app_key': self.appkey, |
'sign_method': 'md5', |
'timestamp': timestamp, |
'format': 'json', |
'v': '2.0', |
**fields |
} |
params['sign'] = self.generate_sign(params) |
response = requests.get(self.base_url, params=params) |
return response.json() |
# 初始化客戶端 |
client = TaobaoAPI( |
appkey='YOUR_APPKEY', |
appsecret='YOUR_APPSECRET' |
) |
# 批量獲取商品示例 |
def batch_fetch_items(keywords, page_size=40, max_pages=10): |
all_items = [] |
for page in range(1, max_pages+1): |
params = { |
'q': keywords, |
'page_no': page, |
'page_size': page_size |
} |
result = client.call_api('taobao.items.search', params) |
if result.get('error_response'): |
print(f"Error: {result['error_response']['sub_msg']}") |
break |
items = result.get('items_search_response', {}).get('items', {}).get('item', []) |
if not items: |
break |
all_items.extend(items) |
time.sleep(1) # 遵守API頻率限制 |
return all_items |
# 使用示例 |
products = batch_fetch_items('運(yùn)動鞋', page_size=40, max_pages=5) |
for p in products[:10]: # 僅展示前10條 |
print(f"{p['title']} - ¥{p['price']} - 銷量:{p['volume']}") |
三、關(guān)鍵參數(shù)說明
參數(shù) | 說明 | 示例值 |
---|---|---|
q | 搜索關(guān)鍵詞 | "無線藍(lán)牙耳機(jī)" |
page_no | 頁碼(1-100) | 1 |
page_size | 每頁數(shù)量(1-40) | 40 |
sort | 排序方式 | "sale-desc"(銷量降序) |
is_tmall | 是否僅天貓商品 | "true" |
start_price | 價格下限(單位:分) | 10000(即100元) |
end_price | 價格上限 | 500000(即5000元) |
四、數(shù)據(jù)解析技巧
python
# 提取核心字段 |
for item in products: |
data = { |
'title': item['title'], |
'price': float(item['price'])/100, # 轉(zhuǎn)換為元 |
'sales': int(item['volume']), |
'detail_url': item['detail_url'], |
'pic_url': item['pic_url'] + '_400x400.jpg', # 獲取高清圖 |
'shop_name': item['nick'] |
} |
# 存儲到CSV/數(shù)據(jù)庫 |
五、注意事項(xiàng)
- 頻率限制
- 免費(fèi)版:QPS≤1(每秒1次)
- 建議設(shè)置
time.sleep(1)
避免觸發(fā)限流
- 數(shù)據(jù)合規(guī)
- 禁止存儲用戶隱私數(shù)據(jù)(如手機(jī)號、地址)
- 不得直接展示商品價格,需通過淘寶客鏈接跳轉(zhuǎn)
- 反爬機(jī)制
- 隨機(jī)User-Agent
- 使用代理IP池(高頻需求時)
- 高級功能
- 淘寶客PID綁定(獲取傭金):python
params['adzone_id'] = '你的PID' |
- 商品詳情API(需單獨(dú)申請):
taobao.item.get
六、常見問題解決
- 簽名錯誤
- 檢查參數(shù)排序是否按ASCII順序
- 確認(rèn)AppSecret正確性
- 返回空數(shù)據(jù)
- 檢查關(guān)鍵詞是否符合淘寶搜索規(guī)則
- 嘗試縮小價格區(qū)間
- IP被封禁
- 立即停止請求,24小時后重試
- 聯(lián)系淘寶客服申訴
建議優(yōu)先使用淘寶官方提供的淘寶開放API文檔進(jìn)行深度開發(fā)。對于高頻商業(yè)需求,可考慮購買淘寶開放平臺的增值服務(wù)(如VIP接口)。