崇明建设小学网站,网站定制开发成本,php网站制作教程,珠海网站建设专线基于 Python 实现淘宝商品详情#xff08;含主图#xff09;API 接口调用的完整方案#xff0c;包含接口接入、数据解析、异常处理等核心内容。注意#xff1a;淘宝官方 API 需通过阿里开放平台申请权限#xff0c;本文以通用开放接口为例#xff0c;实际使用需遵循平台规…基于 Python 实现淘宝商品详情含主图API 接口调用的完整方案包含接口接入、数据解析、异常处理等核心内容。注意淘宝官方 API 需通过阿里开放平台申请权限本文以通用开放接口为例实际使用需遵循平台规范。一、前期准备阿里开放平台注册访问阿里开放平台注册开发者账号创建应用获取AppKey、AppSecret。申请taobao.item.get商品详情接口权限需审核。安装依赖库bash运行pip install requests hmac hashlib urllib.parse # 核心依赖 pip install python-dotenv # 可选管理环境变量二、核心 API 调用代码1. 基础配置.env 文件可选envAPP_KEY你的AppKey APP_SECRET你的AppSecret2. 完整代码实现python运行import requests import time import hmac import hashlib import urllib.parse from dotenv import load_dotenv # 若不用.env可删除 import os # 加载环境变量可选 load_dotenv() class TaobaoItemAPI: 淘宝商品详情API调用类 def __init__(self, app_key, app_secret): self.app_key app_key self.app_secret app_secret self.gateway_url https://eco.taobao.com/router/rest # 正式环境网关 # 沙箱环境网关https://gw.api.tbsandbox.com/router/rest def _generate_sign(self, params): 生成API签名淘宝签名规则 # 1. 按参数名升序排序 sorted_params sorted(params.items(), keylambda x: x[0]) # 2. 拼接成keyvalue格式 sign_str for k, v in sorted_params: if v: # 空值不参与签名 sign_str f{k}{v} # 3. 拼接AppSecret并加密 sign_str self.app_secret sign_str self.app_secret sign hmac.new( self.app_secret.encode(utf-8), sign_str.encode(utf-8), hashlib.md5 ).hexdigest().upper() return sign def get_item_detail(self, num_iid, fieldsNone): 获取商品详情含主图 :param num_iid: 商品ID必填 :param fields: 需要返回的字段默认返回核心字段 :return: 解析后的商品详情字典 # 默认返回字段可根据需求扩展 if not fields: fields ( num_iid,title,pic_url,price,orginal_price,detail_url, item_imgs,cat_name,brand_name,sell_count,stock ) # 构造请求参数 params { method: taobao.item.get, # 接口名称 app_key: self.app_key, format: json, v: 2.0, timestamp: time.strftime(%Y-%m-%d %H:%M:%S, time.localtime()), sign_method: md5, num_iid: num_iid, fields: fields } # 生成签名 params[sign] self._generate_sign(params) try: # 发送请求 response requests.get( self.gateway_url, paramsparams, timeout10, headers{User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64)} ) response.raise_for_status() # 抛出HTTP异常 result response.json() # 处理接口返回 if error_response in result: raise Exception(f接口错误{result[error_response][msg]}) item result[item_get_response][item] return { 商品ID: item[num_iid], 商品标题: item[title], 商品主图: item[pic_url], 商品价格: item[price], 原价: item[orginal_price], 商品链接: item[detail_url], 销量: item.get(sell_count, 0), 库存: item.get(stock, 0), 分类名称: item.get(cat_name, ), 品牌名称: item.get(brand_name, ), 商品图片列表: [img[url] for img in item.get(item_imgs, [])] } except requests.exceptions.RequestException as e: raise Exception(f网络请求错误{str(e)}) except Exception as e: raise Exception(f获取商品详情失败{str(e)}) # 示例调用 if __name__ __main__: # 初始化API实例 api TaobaoItemAPI( app_keyos.getenv(APP_KEY), # 或直接填写你的AppKey app_secretos.getenv(APP_SECRET) # 或直接填写你的AppSecret ) # 调用接口替换为实际商品ID try: item_detail api.get_item_detail(num_iid1234567890) print(商品详情) for key, value in item_detail.items(): print(f{key}: {value}) # 单独获取主图 main_image_url item_detail[商品主图] print(f\n商品主图URL{main_image_url}) # 下载主图可选 img_response requests.get(main_image_url, timeout10) with open(taobao_item_main_img.jpg, wb) as f: f.write(img_response.content) print(主图已下载到本地taobao_item_main_img.jpg) except Exception as e: print(f错误{str(e)})三、关键说明1. 接口参数说明参数名必选说明num_iid是商品 ID淘宝商品链接中的 ID如中的 1234567890fields否需要返回的字段可参考淘宝开放平台文档2. 签名规则核心淘宝 API 签名生成步骤将所有请求参数除 sign 外按参数名 ASCII 升序排序拼接成key1value1key2value2格式首尾拼接AppSecret用 MD5 加密后转大写即为 sign。3. 常见问题权限不足需确保应用已申请taobao.item.get接口权限且账号未被限流签名错误检查参数排序、编码、AppSecret 是否正确商品 ID 无效确认商品 ID 为有效淘宝商品 ID且商品未下架频率限制淘宝 API 有调用频率限制需控制调用速度建议每秒不超过 10 次。四、扩展功能批量获取商品详情循环调用get_item_detail方法注意添加延时避免限流主图批量下载遍历商品列表下载主图并按商品 ID 命名数据持久化将商品详情存入 MySQL/Redis/MongoDB 等数据库异常重试添加重试机制如使用tenacity库处理临时网络错误。五、合规说明调用淘宝 API 需遵守商品数据仅可用于合法场景不得擅自爬取、传播他人商品信息若无需官方 API可考虑合规的电商数据服务商需确认资质。