1. 生成签名(generate_signature
)
签名是调用淘宝 API 时用于验证请求合法性的关键步骤。签名生成的目的是确保请求是由合法的应用发起的,防止恶意请求。
Python
def generate_signature(app_key, app_secret, timestamp, params):
# 生成签名
sign_str = app_key + timestamp + app_secret
for key in sorted(params.keys()):
sign_str += str(params[key])
return hashlib.md5(sign_str.encode('utf-8')).hexdigest()
-
app_key
:你的应用的唯一标识。 -
app_secret
:你的应用的密钥,用于生成签名。 -
timestamp
:当前时间戳,通常以毫秒为单位。 -
params
:请求的参数,包括方法名、版本号等。
签名的生成过程是将 app_key
、timestamp
、app_secret
和所有请求参数拼接成一个字符串,然后对这个字符串进行 MD5 哈希处理,生成一个签名值。
2. 发送 HTTP 请求(search_taobao_products
)
使用 requests
库发送 HTTP GET 请求,并获取 API 返回的数据。
Python
def search_taobao_products(app_key, app_secret, keyword, page=1):
timestamp = str(int(time.time() * 1000))
params = {
'method': 'taobao.item.search',
'app_key': app_key,
'timestamp': timestamp,
'v': '2.0',
'sign_method': 'md5',
'format': 'json',
'q': keyword,
'page_size': 40,
'page_no': page,
}
params['sign'] = generate_signature(app_key, app_secret, timestamp, params)
response = requests.get('https://gw.api.taobao.com/router.json', params=params)
if response.status_code == 200:
return response.json()
else:
print(f"请求失败,状态码:{response.status_code}")
return None
-
timestamp
:当前时间戳,以毫秒为单位。 -
params
:请求参数,包括方法名、版本号、签名方法、格式、关键字、页码等。 -
generate_signature
:调用前面定义的generate_signature
函数生成签名。 -
requests.get
:发送 HTTP GET 请求,将生成的签名和其他参数附加到请求 URL 中。 -
response.json()
:将返回的 JSON 数据解析为 Python 字典。
3. 解析返回的 JSON 数据(parse_response
)
解析 API 返回的 JSON 数据,并提取商品的详细信息。
Python
def parse_response(data):
if data['code'] == '0':
items = data['taobao_item_search_response']['item']
for item in items:
print(f"商品标题: {item['title']}")
print(f"商品价格: {item['price']}")
print(f"商品图片: {item['pic_url']}")
print(f"商品详情页 URL: {item['detail_url']}")
else:
print(f"API 请求失败,错误信息: {data['error_response']['sub_msg']}")
-
data['code']
:检查返回的状态码,0
表示成功。 -
data['taobao_item_search_response']['item']
:提取商品列表。 -
item['title']
:商品标题。 -
item['price']
:商品价格。 -
item['pic_url']
:商品图片的 URL。 -
item['detail_url']
:商品详情页的 URL。
4. 主程序
在主程序中调用上述函数,按关键字搜索商品并展示搜索结果。
Python
if __name__ == '__main__':
app_key = 'your_app_key' # 替换为你的 App Key
app_secret = 'your_app_secret' # 替换为你的 App Secret
keyword = 'iPhone 13' # 设置搜索关键字
page = 1 # 设置搜索结果的页码
response_data = search_taobao_products(app_key, app_secret, keyword, page)
if response_data:
parse_response(response_data)
-
app_key
和app_secret
:从淘宝开放平台获取的凭证。 -
keyword
:搜索关键字。 -
page
:搜索结果的页码。 -
search_taobao_products
:调用前面定义的函数,发送搜索请求。 -
parse_response
:调用前面定义的函数,解析返回的数据并打印商品信息。
工作原理总结
-
生成签名:通过
generate_signature
函数生成签名,确保请求的合法性。 -
发送请求:通过
requests.get
发送 HTTP 请求,将生成的签名和其他参数附加到请求 URL 中。 -
解析响应:通过
parse_response
函数解析返回的 JSON 数据,提取商品的详细信息。 -
主程序:在主程序中调用上述函数,按关键字搜索商品并展示搜索结果。
通过上述步骤,你可以使用 Python 爬虫技术按关键字搜索淘宝商品,并解析返回的 JSON 数据。希望这个示例对你有所帮助!