基于Python淘宝商品详情(商品信息主图)API接口
2026/5/5 2:15:47 网站建设 项目流程

基于 Python 实现淘宝商品详情(含主图)API 接口调用的完整方案,包含接口接入、数据解析、异常处理等核心内容。

注意:淘宝官方 API 需通过阿里开放平台申请权限,本文以通用开放接口为例,实际使用需遵循平台规范。

一、前期准备

  1. 阿里开放平台注册
    • 访问阿里开放平台注册开发者账号,创建应用,获取AppKeyAppSecret
    • 申请taobao.item.get(商品详情)接口权限(需审核)。
  2. 安装依赖库

bash

运行

pip install requests hmac hashlib urllib.parse # 核心依赖 pip install python-dotenv # 可选,管理环境变量

二、核心 API 调用代码

1. 基础配置(.env 文件,可选)

env

APP_KEY=你的AppKey APP_SECRET=你的AppSecret
2. 完整代码实现

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(), key=lambda x: x[0]) # 2. 拼接成key=value格式 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, fields=None): """ 获取商品详情(含主图) :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, params=params, timeout=10, 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_key=os.getenv("APP_KEY"), # 或直接填写你的AppKey app_secret=os.getenv("APP_SECRET") # 或直接填写你的AppSecret ) # 调用接口(替换为实际商品ID) try: item_detail = api.get_item_detail(num_iid="1234567890") 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, timeout=10) 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,如中的 1234567890)
fields需要返回的字段,可参考淘宝开放平台文档
2. 签名规则(核心)

淘宝 API 签名生成步骤:

  1. 将所有请求参数(除 sign 外)按参数名 ASCII 升序排序;
  2. 拼接成key1value1key2value2格式;
  3. 首尾拼接AppSecret,用 MD5 加密后转大写即为 sign。
3. 常见问题
  • 权限不足:需确保应用已申请taobao.item.get接口权限,且账号未被限流;
  • 签名错误:检查参数排序、编码、AppSecret 是否正确;
  • 商品 ID 无效:确认商品 ID 为有效淘宝商品 ID,且商品未下架;
  • 频率限制:淘宝 API 有调用频率限制,需控制调用速度(建议每秒不超过 10 次)。

四、扩展功能

  1. 批量获取商品详情:循环调用get_item_detail方法,注意添加延时避免限流;
  2. 主图批量下载:遍历商品列表,下载主图并按商品 ID 命名;
  3. 数据持久化:将商品详情存入 MySQL/Redis/MongoDB 等数据库;
  4. 异常重试:添加重试机制(如使用tenacity库),处理临时网络错误。

五、合规说明

  1. 调用淘宝 API 需遵守
  2. 商品数据仅可用于合法场景,不得擅自爬取、传播他人商品信息;
  3. 若无需官方 API,可考虑合规的电商数据服务商(需确认资质)。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询