淘宝API+爬虫混合方案:合规采集历史价格与评价数据
在电商数据分析中,获取淘宝商品的历史价格和评价数据是非常有价值的。由于淘宝有严格的反爬虫机制和 API 使用规范,采用淘宝 API 与爬虫的混合方案可以在合规的前提下采集到所需数据。以下是具体的实现思路和示例代码。
实现思路
- 淘宝 API 部分:利用淘宝开放平台提供的 API 获取商品的基本信息和部分公开数据,这部分数据获取是合法合规的,并且能获取到较为准确和全面的信息。
- 爬虫部分:对于 API 无法提供的历史价格和评价数据,使用爬虫技术从淘宝商品页面上抓取。但要注意遵守淘宝的
robots.txt
规则,避免过度频繁的请求,以免被封禁 IP。 - 数据整合:将通过 API 获取的数据和爬虫抓取的数据进行整合,形成完整的商品历史价格和评价数据集。
代码实现
import requests
from bs4 import BeautifulSoup
import json
import time
# 淘宝 API 配置
API_KEY = 'your_api_key'
SECRET = 'your_secret'
API_URL = 'https://gw.api.taobao.com/router/rest'
# 模拟浏览器的请求头
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'}
def get_api_data(item_id):
"""
使用淘宝 API 获取商品基本信息
:param item_id: 商品 ID
:return: 商品基本信息
"""
params = {
'method': 'taobao.item.get',
'app_key': API_KEY,
'sign_method': 'md5',
'timestamp': time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()),
'format': 'json',
'v': '2.0',
'fields': 'num_iid,title,price',
'num_iid': item_id
}
# 这里需要实现签名算法,具体根据淘宝 API 文档来
# 示例中省略签名计算部分
response = requests.get(API_URL, params=params)
return response.json()
def get_price_history(item_id):
"""
使用爬虫获取商品历史价格数据
:param item_id: 商品 ID
:return: 商品历史价格数据
"""
url = f'https://item.taobao.com/item.htm?id={item_id}'
response = requests.get(url, headers=headers)
soup = BeautifulSoup(response.text, 'html.parser')
# 这里需要根据实际页面结构解析历史价格数据
# 示例中只是简单返回空列表
return []
def get_reviews(item_id):
"""
使用爬虫获取商品评价数据
:param item_id: 商品 ID
:return: 商品评价数据
"""
url = f'https://rate.taobao.com/feedRateList.htm?auctionNumId={item_id}¤tPageNum=1'
response = requests.get(url, headers=headers)
data = json.loads(response.text[response.text.find('{'):-2])
return data.get('comments', [])
def collect_data(item_id):
"""
整合 API 和爬虫数据
:param item_id: 商品 ID
:return: 整合后的商品数据
"""
api_data = get_api_data(item_id)
price_history = get_price_history(item_id)
reviews = get_reviews(item_id)
combined_data = {
'api_data': api_data,
'price_history': price_history,
'reviews': reviews
}
return combined_data
if __name__ == "__main__":
item_id = '123456789' # 替换为实际的商品 ID
data = collect_data(item_id)
print(data)
代码解释
get_api_data
函数:通过淘宝 API 获取商品的基本信息,如商品 ID、标题和价格。需要根据淘宝 API 文档实现签名算法。get_price_history
函数:使用爬虫从淘宝商品页面上获取商品的历史价格数据。需要根据实际页面结构解析数据。get_reviews
函数:使用爬虫从淘宝评价页面上获取商品的评价数据。collect_data
函数:将 API 获取的数据和爬虫抓取的数据进行整合,形成完整的商品数据。
注意事项
- API 使用:在使用淘宝 API 时,需要先在淘宝开放平台注册开发者账号,获取 API Key 和 Secret,并按照 API 文档的要求进行开发。
- 爬虫合规:在使用爬虫时,要遵守淘宝的
robots.txt
规则,避免过度频繁的请求,以免被封禁 IP。可以设置合理的请求间隔时间,如每次请求后暂停 1 - 2 秒。 - 数据解析:淘宝页面结构可能会经常变化,需要定期检查和更新爬虫代码中的数据解析部分。