电商数据分析之淘宝商品数据获取API调用实例分享

105 阅读10分钟

​  

在电商运营和数据分析工作中,淘宝商品数据(如价格、销量、评价、库存等)是核心决策依据 —— 通过分析竞品价格带可优化定价策略,追踪爆款销量变化能预判市场趋势,统计品类分布可发现蓝海机会。但手动复制粘贴数据不仅效率低(上千款商品需数小时),还易出错(漏填、错填数据),而通过淘宝开放平台 API 实现自动化获取,能让数据采集效率提升 10 倍以上。今天就以「商品基础信息获取」为例,带大家一步步掌握从 API 申请到数据落地的完整流程。

一、前提准备:打通淘宝开放平台「通道」

自动化获取数据的第一步,是获得淘宝开放平台的「访问权限」—— 就像进入商场需要门禁卡,调用 API 需要平台授予的合法凭证。这一步看似繁琐,却是合规获取数据的关键(避免因「爬虫爬取」违反平台规则导致账号风险)。

1. 注册并入驻淘宝开放平台

  • 访问淘宝开放平台官网,用企业或个人淘宝账号登录(企业账号权限更全,建议优先用企业资质)。
  • 完成「开发者认证」:个人账号需上传身份证,企业账号需上传营业执照,审核通常 1-2 个工作日完成(认证后才能创建应用、申请 API 权限)。

2. 创建「应用」获取核心凭证

认证通过后,进入「控制台 - 应用管理」,点击「创建应用」:

  • 应用类型选择「电商服务商」或「自用型应用」(个人数据分析选「自用型」即可,无需审核;服务商需额外提交资质)。
  • 填写应用名称(如「电商商品数据分析工具」)、描述(简要说明用途,避免敏感词),提交后会生成两个关键凭证:
    • App Key(客户端 ID) :标识你的应用身份,相当于「账号」。
    • App Secret(客户端密钥) :用于生成 API 签名的密钥,相当于「密码」,务必保管好,不要泄露到公开代码库。

3. 申请「商品数据相关 API 权限」

淘宝 API 采用「权限分级」,不是创建应用就能调用所有接口,需针对性申请:

  • 在应用详情页点击「权限管理 - 申请权限」,搜索以下核心权限(根据需求选择):
    • taobao.item.search:商品搜索接口(按关键词、分类、价格区间等筛选商品)。
    • taobao.item.get:商品详情接口(获取单款商品的详细信息,如规格、售后政策)。
    • taobao.sellercenter.items.list:店铺商品列表接口(获取指定店铺的所有商品)。
  • 申请理由需真实填写(如「企业内部电商数据分析,用于竞品监控和定价优化」),自用型应用的基础权限通常 1-3 个工作日通过审核。

二、环境搭建:准备本地开发工具

API 调用需要代码实现,这里选择 Python(上手简单、数据处理库丰富)作为开发语言,推荐新手按以下步骤搭建环境:

1. 安装 Python 环境

  • 下载并安装 Python 3.8 + 版本,安装时勾选「Add Python to PATH」(方便后续在命令行调用)。
  • 验证安装:打开命令行(Windows 用 CMD,Mac 用终端),输入python --version,显示版本号即成功。

2. 安装必要依赖库

需要 3 个核心库:

  • requests:发送 HTTP 请求(调用 API 本质是发送网络请求)。
  • json:解析 API 返回的 JSON 格式数据(淘宝 API 返回数据默认是 JSON)。
  • hashlib:生成 API 签名(淘宝 API 要求请求必须带签名,防止数据篡改)。
  • 安装命令:在命令行输入pip install requests(json 和 hashlib 是 Python 内置库,无需额外安装)。

3. 选择代码编辑器

  • 新手推荐用「PyCharm 社区版」(免费、功能够用)或「VS Code」(轻量、插件丰富),安装后创建一个新的 Python 文件,即可开始写代码。

三、核心步骤:API 调用完整实现(以商品搜索为例)

接下来是最关键的部分 —— 通过代码调用taobao.item.search接口,获取指定关键词的商品数据。整个过程分为「生成签名」「获取 Access Token」「发送 API 请求」「解析数据」4 步,我们一步步拆解。

1. 第一步:获取 Access Token(临时访问凭证)

淘宝 API 调用需要「Access Token」(相当于临时密钥,有效期通常 2 小时),需用 App Key 和 App Secret 获取:

  • 请求参数(POST 方式):
参数名说明示例值
grant_type授权类型,自用应用固定为client_credentialsclient_credentials
client_id你的 App Key25123456(替换为你的实际 Key)
client_secret你的 App Secretabc123def456(替换为你的 Secret)
  • 代码实现


`import requests`

`# 1. 配置基础信息`

`APP_KEY = "你的App Key"`

`APP_SECRET = "你的App Secret"`

`TOKEN_URL = "https://oauth.taobao.com/token"`

`# 2. 发送请求获取Access Token`

`def get_access_token():`

`params = {`

`"grant_type": "client_credentials",`

`"client_id": APP_KEY,`

`"client_secret": APP_SECRET`

`}`

`# 发送POST请求`

`response = requests.post(TOKEN_URL, params=params)`

`# 解析JSON响应`

`result = response.json()`

`# 检查是否成功(成功会返回access_token字段)`

`if "access_token" in result:`

`print("Access Token获取成功:", result["access_token"])`

`return result["access_token"]`

`else:`

`print("获取失败,原因:", result)`

`return None`

`# 调用函数获取Token`

`access_token = get_access_token()`
  • 运行结果:如果参数正确,会打印出类似Access Token获取成功:123456abcdef的信息;若失败(如 App Secret 错误),会提示具体原因(如invalid_client)。

2. 第二步:生成 API 签名(关键!防止请求被篡改)

淘宝 API 要求所有请求参数(除文件类参数)必须生成「签名(sign)」,签名规则是:

  1. 把所有请求参数(含 Access Token)按参数名的「字母升序」排序(如keyword在page_no前面)。
  1. 按「key=value」的格式拼接所有参数,形成字符串(如keyword=手机&page_no=1&access_token=xxx)。
  1. 在拼接字符串末尾加上&app_secret=你的App Secret。
  1. 对最终字符串进行「MD5 加密」,并转成大写,得到签名。
  • 代码实现签名函数


`import hashlib`

`def generate_sign(params, app_secret):`

`# 1. 按参数名升序排序`

`sorted_params = sorted(params.items(), key=lambda x: x[0])`

`# 2. 拼接参数为key=value&key=value格式`

`param_str = "&".join([f"{key}={value}" for key, value in sorted_params])`

`# 3. 拼接App Secret`

`sign_str = f"{param_str}&app_secret={app_secret}"`

`# 4. MD5加密并转大写`

`sign = hashlib.md5(sign_str.encode("utf-8")).hexdigest().upper()`

`return sign`

3. 第三步:调用商品搜索 API 获取数据

以「搜索关键词为『无线耳机』、页码 1、每页 20 条商品」为例,配置请求参数并发送请求:

  • API 基础信息
    • 接口名称:taobao.item.search
    • 请求方式:GET
  • 核心请求参数
参数名说明示例值
method接口名称,固定为taobao.item.searchtaobao.item.search
app_key你的 App Key25123456
access_token第一步获取的 Access Token123456abcdef
timestamp当前时间戳(格式:yyyy-MM-dd HH:mm:ss)2024-10-01 14:30:00
format返回数据格式,固定为jsonjson
vAPI 版本,固定为2.02.0
keyword搜索关键词无线耳机
page_no页码(从 1 开始)1
page_size每页条数(最大 40)20
  • 完整代码实现


`from datetime import datetime`

`# 1. 配置API请求参数`

`def get_item_search_data(access_token):`

`# 基础参数`

`base_params = {`

`"method": "taobao.item.search",`

`"app_key": APP_KEY,`

`"access_token": access_token,`

`"timestamp": datetime.now().strftime("%Y-%m-%d %H:%M:%S"), # 当前时间`

`"format": "json",`

`"v": "2.0",`

`"keyword": "无线耳机", # 可替换为你的目标关键词`

`"page_no": 1,`

`"page_size": 20`

`}`

`# 2. 生成签名`

`sign = generate_sign(base_params, APP_SECRET)`

`# 3. 把签名加入请求参数`

`base_params["sign"] = sign`

`# 4. 发送GET请求`

`api_url = "https://eco.taobao.com/router/rest"`

`response = requests.get(api_url, params=base_params)`

`# 5. 解析响应`

`result = response.json()`

`return result`

`# 调用函数获取商品数据`

`item_data = get_item_search_data(access_token)`

`# 打印原始数据(查看是否成功)`

`print("商品搜索API返回结果:", item_data)`

4. 第四步:解析数据并存储(提取有用信息)

API 返回的原始数据包含很多字段(如请求状态、元数据、商品列表),我们需要提取核心信息(如商品 ID、标题、价格、销量),并存储为 CSV 文件(方便后续用 Excel 或 Python 分析)。

  • 数据解析与存储代码

import csv

def parse_and_save_data(item_data):

# 1. 检查请求是否成功(成功会有"taobao_item_search_response"字段)

if "taobao_item_search_response" not in item_data:

print("API请求失败,错误信息:", item_data.get("error_response", "未知错误"))

return

# 2. 提取商品列表

response = item_data["taobao_item_search_response"]

item_list = response.get("items", {}).get("item", []) # 商品列表在items->item下

if not item_list:

print("未找到商品数据")

return

# 3. 定义要保存的字段(根据需求调整)

fields = ["商品ID", "商品标题", "售价(元)", "销量(件)", "店铺名称", "商品链接"]

# 4. 写入CSV文件

with open("淘宝无线耳机商品数据.csv", "w", encoding="utf-8-sig", newline="") as f:

writer = csv.DictWriter(f, fieldnames=fields)

writer.writeheader() # 写入表头

# 遍历商品列表,提取字段

for item in item_list:

row = {

"商品ID": item.get("num_iid", ""), # 商品唯一ID

"商品标题": item.get("title", "").replace("<span class='H'>", "").replace("</span>", ""), # 去除标题中的高亮标签

"售价(元)": item.get("price", ""),

"销量(件)": item.get("sale_count", ""),

"店铺名称": item.get("nick", ""),

"商品链接": f"https://item.taobao.com/item.htm?id={item.get('num_iid', '')}" # 拼接商品链接

}

writer.writerow(row)

print("数据已保存到:淘宝无线耳机商品数据.csv")

# 调用函数解析并存储数据

parse_and_save_data(item_data)

  • 最终效果:运行代码后,会在当前文件夹生成一个 CSV 文件,用 Excel 打开就能看到结构化的商品数据,无需手动复制粘贴。

四、关键注意事项(避坑指南)

  1. API 调用频率限制:淘宝对 API 调用有「QPS(每秒请求数)」限制(基础权限通常是 1-5 QPS),如果短时间内发送大量请求,会被限流(返回isv.invalid-qps错误),建议加time.sleep(0.5)控制请求间隔。
  1. Access Token 有效期:Token 有效期约 2 小时,过期后需重新获取,可在代码中加入「Token 过期检测」(如判断返回错误码invalid_token时自动重新获取)。
  1. 数据合规性:获取的商品数据仅可用于「自用数据分析」,不可用于商业化传播(如转售数据),也不可获取用户隐私信息(如买家手机号),否则会违反淘宝平台规则。
  1. 错误排查:若 API 返回错误,先查看error_response中的code和msg字段(如110代表 App Key 错误,401代表权限不足),再对照淘宝 API 错误码文档排查原因。

五、总结与后续应用

通过以上步骤,我们完成了「从 API 申请到数据存储」的全流程 —— 只需修改keyword(关键词)、page_no(页码)等参数,就能批量获取不同品类的商品数据。后续可基于这些数据做更深入的分析:

  • 竞品价格分析:用 Excel 或 Python 绘制价格分布直方图,找出主流价格带。
  • 销量监控:定时调用 API(用schedule库实现定时任务),追踪爆款销量变化。
  • 店铺分析:统计头部店铺的商品数量和销量占比,识别核心竞品店铺。

如果需要获取「商品评价」「库存变化」等更细分的数据,只需按相同逻辑申请对应 API(如taobao.item.review.list评价接口),替换参数和解析字段即可。实践中遇到问题时,优先查看淘宝开放平台的「API 文档」和「开发者社区」,大部分常见问题都有解决方案。