以下是一个用于采集速卖通商品详情并返回 JSON 数据的 Python 代码示例。该代码使用了
requests库发送请求,并通过解析响应获取商品信息。python
运行
import requestsimport jsonimport timefrom fake_useragent import UserAgentclass AliExpressProductScraper:
def __init__(self):
self.headers = {
'User-Agent': UserAgent().random,
'Accept': 'application/json, text/plain, */*',
'Accept-Language': 'en-US,en;q=0.9',
'Connection': 'keep-alive',
'Referer': 'https://www.aliexpress.com/',
}
# 速卖通商品详情API基础URL
self.base_api_url = "https://m.aliexpress.com/aeglodetailweb/api/getProductDetail"
def get_product_details(self, product_id):
"""
获取速卖通商品详情
:param product_id: 商品ID
:return: 商品详情的JSON数据
"""
try:
# 构造请求参数
params = {
'productId': product_id,
'country': 'US', # 可以根据需要修改国家代码
'currency': 'USD', # 可以根据需要修改货币代码
'language': 'en', # 可以根据需要修改语言
'appId': '10000',
't': str(int(time.time() * 1000)), # 时间戳
}
# 发送请求
response = requests.get(
url=self.base_api_url,
params=params,
headers=self.headers,
timeout=10
)
# 检查响应状态
if response.status_code == 200:
# 解析JSON响应
result = response.json()
# 提取有用的商品信息
if result.get('success'):
product_data = result.get('data', {})
# 整理需要的字段
product_info = {
'product_id': product_id,
'title': product_data.get('productTitle'),
'price': product_data.get('price', {}).get('formattedPrice'),
'original_price': product_data.get('originalPrice', {}).get('formattedPrice'),
'seller': {
'name': product_data.get('seller', {}).get('sellerName'),
'rating': product_data.get('seller', {}).get('positiveRate'),
'followers': product_data.get('seller', {}).get('followerCount')
},
'shipping': {
'method': product_data.get('logistics', {}).get('logisticsDesc'),
'time': product_data.get('logistics', {}).get('deliveryTimeDesc')
},
'images': product_data.get('imagePathList', []),
'description': product_data.get('description'),
'categories': product_data.get('categoryInfo', {}).get('categoryName'),
'rating': {
'average': product_data.get('evaluation', {}).get('averageStar'),
'count': product_data.get('evaluation', {}).get('totalValidNum')
},
'stock': product_data.get('stockInfo', {}).get('totalAvailQuantity'),
'variants': product_data.get('skuInfo', {}).get('skuList', [])
}
return json.dumps(product_info, ensure_ascii=False, indent=2)
else:
return json.dumps({'error': '获取商品信息失败', 'message': result.get('message')}, indent=2)
else:
return json.dumps({'error': f'请求失败,状态码: {response.status_code}'}, indent=2)
except Exception as e:
return json.dumps({'error': '发生异常', 'message': str(e)}, indent=2)if __name__ == "__main__":
# 示例用法
scraper = AliExpressProductScraper()
# 替换为实际的速卖通商品ID
product_id = "1005005762792526"
product_details = scraper.get_product_details(product_id)
print(product_details)使用说明:
首先需要安装必要的库:
bash
pip install requests fake_useragent
- 代码说明:
使用了速卖通移动端的 API 接口,相对稳定
随机生成 User-Agent 以避免被识别为爬虫
可通过修改
country、currency和language参数获取不同地区的商品信息提取了常见的商品信息字段,如标题、价格、卖家信息、物流信息等
- 注意事项:
频繁请求可能会导致 IP 被临时封禁,建议添加请求间隔
速卖通的 API 可能会不定期更改,若代码失效可能需要更新 API 地址或参数
商业使用请遵守速卖通的 robots 协议和相关规定,避免法律风险
部分字段可能因商品不同而返回不同的结构,可能需要根据实际情况调整代码
如果需要获取更多字段信息,可以查看 API 返回的完整 JSON 数据,然后在
product_info字典中添加相应的字段映射。