import hashlib
import time
import requests
import json
import logging
from typing import Dict, Any, Optional, List, Tuple
class TaobaoAPIClient:
"""淘宝API客户端,用于访问淘宝开放平台的各种API服务"""
def __init__(self, app_key: str, app_secret: str,
endpoint: str = "https://gw.api.taobao.com/router/rest"):
"""
初始化淘宝API客户端
Args:
app_key: 应用的AppKey
app_secret: 应用的AppSecret
endpoint: API请求的端点URL
"""
self.app_key = app_key
self.app_secret = app_secret
self.endpoint = endpoint
self.logger = logging.getLogger("TaobaoAPIClient")
def generate_sign(self, params: Dict[str, Any]) -> str:
"""
生成API请求签名
根据淘宝开放平台的规定,将参数按照字典序排序后拼接,
并使用MD5算法生成签名
Args:
params: 请求参数的字典
Returns:
签名后的字符串
"""
# 对参数进行排序
sorted_params = sorted(params.items(), key=lambda x: x[0])
# 拼接参数
sign_str = self.app_secret
for k, v in sorted_params:
sign_str += f"{k}{v}"
sign_str += self.app_secret
# 计算MD5值
return hashlib.md5(sign_str.encode("utf-8")).hexdigest().upper()
def call(self, method: str, params: Dict[str, Any]) -> Optional[Dict[str, Any]]:
"""
调用淘宝API
Args:
method: API方法名
params: 请求参数
Returns:
API响应的字典形式,或None(如果发生错误)
"""
try:
# 构建公共参数
common_params = {
"app_key": self.app_key,
"method": method,
"format": "json",
"v": "2.0",
"sign_method": "md5",
"timestamp": time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())
}
# 合并公共参数和业务参数
all_params = {**common_params, **params}
# 生成签名
all_params["sign"] = self.generate_sign(all_params)
# 发送请求
response = requests.post(self.endpoint, data=all_params)
response.raise_for_status()
# 解析响应
result = response.json()
return result
except Exception as e:
self.logger.error(f"API调用失败: {str(e)}")
return None
本文围绕淘宝商品搜索 API 的分步构建,详细介绍了从接入到数据采集的完整实现过程。主要内容包括:
- 淘宝 API 基础接入
- 实现了基础的淘宝 API 客户端,处理认证和签名机制
- 介绍了 API 请求的基本结构和必要参数
- 提供了错误处理和日志记录功能
2.商品搜索功能实现
- 实现了基于关键词的商品搜索接口
- 支持分页、排序和筛选等功能
- 详细解析了 API 响应结构,提取有效商品信息
3.数据处理与分析
- 提供了数据清洗和转换功能,提取关键商品信息
- 计算了优惠后价格和佣金等衍生指标
- 使用 Pandas 进行数据处理,方便后续分析
4.完整使用示例
-
展示了如何组合各个模块完成完整的搜索流程
-
实现了多页数据采集,避免频繁请求
-
将结果保存为 CSV 文件,便于进一步处理
代码部分提供了完整的实现方案,包括 API 客户端、商品搜索、数据处理和主程序示例。你可以根据实际需求进行调整和扩展,例如添加更多筛选条件、优化数据存储方式或增强错误处理能力。