淘宝店铺所有商品 API 接口全解析:批量获取全店商品数据(2026 最新版)

简介: 在电商数据采集与店铺管理场景中,批量获取淘宝店铺所有商品是核心需求之一。淘宝开放平台提供了标准化 API 接口,支持按店铺、类目、时间等维度拉取商品全量数据,涵盖标题、价格、SKU、库存、销量等关键字段。本文将从接口选型、参数配置、代码实现、数据解析全流程展开讲解,适用于店铺运营、ERP 系统对接、竞品分析等场景。

在电商数据采集与店铺管理场景中,批量获取淘宝店铺所有商品是核心需求之一。淘宝开放平台提供了标准化 API 接口,支持按店铺、类目、时间等维度拉取商品全量数据,涵盖标题、价格、SKU、库存、销量等关键字段。本文将从接口选型、参数配置、代码实现、数据解析全流程展开讲解,适用于店铺运营、ERP 系统对接、竞品分析等场景。

一、核心主题与适用场景

适用场景

  • 店铺商家:批量同步商品至 ERP 系统、库存监控、商品批量上下架
  • 竞品分析:抓取竞品店铺商品、价格走势、SKU 规格对比
  • 数据聚合:多店铺商品整合、选品工具开发、市场调研
  • 开发者:淘宝开放平台 API 接入、通用商品数据接口实现

二、淘宝店铺商品核心 API 接口(官方)

淘宝开放平台提供3 类核心接口用于获取店铺商品,覆盖全量商品、列表商品、搜索商品场景,需注意接口权限差异(商家授权 / 第三方应用权限)。

表格

接口名称 接口方法名 核心能力 适用场景 权限要求
店铺商品列表(全量) taobao.shop.get.items 按店铺账号获取全量商品,支持分页 商家自有店铺商品同步、全店商品采集 商家授权(需店铺 token)
批量商品详情查询 taobao.items.list.get 批量获取商品详情(单次≤20 个 ID) 已知商品 ID 批量拉取详情、库存 / 价格监控 通用开发者权限
店铺类目商品查询 taobao.items.search 按类目 / 关键词查询店铺商品 类目商品筛选、竞品选品分析 通用开发者权限
淘宝客店铺商品 taobao.tbk.shop.recommend.get 获取店铺推荐商品(含佣金 / 优惠券) 淘宝客选品、推广商品采集 淘宝客联盟权限

重点接口详解

1. taobao.shop.get.items(商家专属全量商品接口)

核心优势:直接获取商家店铺下所有商品,无需手动提取商品 ID,支持按时间、状态筛选(在售 / 售中 / 下架),是商家批量采集的首选接口。

必填参数

  • session:店铺授权 token(商家授权获取)
  • nick:店铺账号(卖家昵称)
  • page_no:分页页码(默认 1)
  • page_size:每页条数(最大 200,推荐 100-200)
  • status:商品状态(onsale = 在售,all = 全部)

2. taobao.items.search(通用搜索接口)

核心优势:支持类目 ID、关键词、店铺 ID多维筛选,可精准获取店铺指定类目商品,适合竞品类目分析。

必填参数

  • q:关键词 / 店铺 ID(可传店铺昵称精准查询)
  • cat:类目 ID(可选,筛选指定类目)
  • page_no/page_size:分页参数
  • fields:指定返回字段(提升效率)

三、前置准备:获取 API 调用权限

1. 注册淘宝开放平台账号

  • 访问:https://open.taobao.com/,用淘宝账号登录
  • 完成实名认证(个人 / 企业),进入开发者中心

2. 创建应用并获取密钥

  • 开发者中心 → 应用管理 → 创建新应用
  • 应用类型选择电商工具 / 数据工具,填写基本信息
  • 审核通过后,获取AppKey、AppSecret(核心密钥,需保密)

3. 申请接口权限

  • 进入API 权限管理,搜索目标接口(如taobao.shop.get.items
  • 提交权限申请(注明用途:如 “店铺商品批量同步”)
  • 等待审核(1-3 个工作日)

4. 获取授权 Token(商家专属接口)

  • 商家需通过OAuth2.0 授权,将店铺账号授权给你的应用
  • 授权流程:
  1. 构造授权 URL(替换 AppKey 与回调地址)url
https://oauth.taobao.com/authorize?response_type=code&client_id=你的AppKey&redirect_uri=你的回调地址&view=web
  1. 店铺账号登录并授权,回调地址返回code
  2. code换取access_token(授权 token)
  3. access_token有效期 30 天,需定期刷新

四、Python 调用淘宝店铺商品 API(完整示例)

以下以获取店铺在售全量商品为例,提供可直接运行的 Python 代码,包含签名生成、请求发送、数据分页、JSON 解析全流程。

1. 环境准备

安装依赖库:

bash

运行

pip install requests

2. 核心代码(商家全量商品接口)

python

运行

import requests
import time
import json
import hashlib
class TaobaoShopClient:
    def __init__(self, app_key, app_secret, access_token):
        self.app_key = app_key
        self.app_secret = app_secret
        self.access_token = access_token
        self.api_url = "https://eco.taobao.com/router/rest"  # 淘宝开放平台网关
    def generate_sign(self, params):
        """生成淘宝API签名(MD5加密)"""
        # 1. 参数按key字典排序
        sorted_params = sorted(params.items())
        # 2. 拼接参数串
        param_str = "".join([f"{k}{v}" for k, v in sorted_params])
        # 3. 前后加AppSecret,MD5加密
        sign_str = f"{self.app_secret}{param_str}{self.app_secret}"
        return hashlib.md5(sign_str.encode("utf-8")).hexdigest().upper()
    def request(self, method, params):
        """通用API请求方法"""
        # 公共参数
        public_params = {
            "method": method,
            "app_key": self.app_key,
            "timestamp": time.strftime("%Y-%m-%d %H:%M:%S"),
            "format": "json",
            "v": "2.0",
            "sign_method": "md5",
            "access_token": self.access_token
        }
        # 合并公共参数与业务参数
        all_params = {**public_params, **params}
        # 生成签名
        all_params["sign"] = self.generate_sign(all_params)
        try:
            # 发送POST请求
            resp = requests.post(self.api_url, data=all_params, timeout=15)
            resp.raise_for_status()  # 抛出HTTP错误
            return resp.json()
        except Exception as e:
            return {"error": f"请求失败:{str(e)}"}
    def get_shop_all_items(self, shop_nick, page_no=1, page_size=200, status="onsale"):
        """获取淘宝店铺所有商品(分页)"""
        params = {
            "nick": shop_nick,  # 店铺账号昵称
            "page_no": page_no,
            "page_size": page_size,
            "status": status,  # 在售商品:onsale,全部:all
            "fields": "num_iid,title,price,sku,stock,volume,category_id,pic_url,publish_time"  # 指定返回字段
        }
        return self.request("taobao.shop.get.items", params)
    def parse_shop_items(self, json_data):
        """解析店铺商品数据(结构化)"""
        try:
            # 淘宝API返回结构:第一层为接口方法名+_response
            items_response = json_data.get("taobao_shop_get_items_response", {})
            result = items_response.get("shop_item_get_response", {})
            total_results = result.get("total_results", 0)  # 商品总数
            items = result.get("items", {}).get("item", [])  # 商品列表
            # 结构化解析
            parsed_items = []
            for item in items:
                parsed_items.append({
                    "商品ID": item.get("num_iid"),
                    "商品标题": item.get("title"),
                    "售价": item.get("price"),
                    "库存": item.get("stock", 0),
                    "销量": item.get("volume", 0),
                    "类目ID": item.get("category_id"),
                    "主图": item.get("pic_url"),
                    "发布时间": item.get("publish_time"),
                    "SKU": item.get("sku", "")  # SKU详情需单独解析
                })
            return {
                "total": total_results,
                "items": parsed_items
            }
        except Exception as e:
            return {"error": f"解析失败:{str(e)}"}
# ===================== 配置信息(替换为自己的) =====================
APP_KEY = "你的淘宝开放平台AppKey"
APP_SECRET = "你的淘宝开放平台AppSecret"
ACCESS_TOKEN = "店铺授权获取的access_token"
SHOP_NICK = "目标店铺账号昵称"  # 如:xx旗舰店
# 初始化客户端
client = TaobaoShopClient(APP_KEY, APP_SECRET, ACCESS_TOKEN)
# ===================== 批量获取全店商品 =====================
if __name__ == "__main__":
    all_items = []
    total_items = 0
    page = 1
    # 循环获取所有分页数据
    while True:
        print(f"正在获取第 {page} 页商品...")
        # 获取当前页商品
        response = client.get_shop_all_items(SHOP_NICK, page_no=page, page_size=200)
        # 解析数据
        parsed_data = client.parse_shop_items(response)
        if "error" in parsed_data:
            print(f"获取失败:{parsed_data['error']}")
            break
        # 累加商品数据
        items = parsed_data["items"]
        if not items:
            break
        all_items.extend(items)
        total_items = parsed_data["total"]
        # 分页终止条件:当前页商品数 < 每页条数,或已获取全部
        if len(items) < 200:
            break
        page += 1
        time.sleep(1)  # 限流,避免触发平台风控
    # 输出结果
    print(f"共获取 {total_items} 个商品,实际解析 {len(all_items)} 个")
    # 保存至JSON文件
    with open("taobao_shop_items.json", "w", encoding="utf-8") as f:
        json.dump(all_items, f, ensure_ascii=False, indent=2)
    print("商品数据已保存至 taobao_shop_items.json")

3. 通用商品解析(第三方应用 / 非商家场景)

若无需商家授权,可通过 **taobao.items.search** 接口,按店铺关键词查询商品:

python

运行

def get_shop_items_by_search(shop_nick, page_no=1, page_size=100):
    """通过搜索接口获取店铺商品(非商家授权)"""
    params = {
        "q": shop_nick,  # 店铺昵称作为关键词
        "page_no": page_no,
        "page_size": page_size,
        "fields": "num_iid,title,price,volume,pic_url"
    }
    return client.request("taobao.items.search", params)
# 调用示例
search_response = get_shop_items_by_search("xx旗舰店")
print(search_response)

五、关键参数与字段说明

1. 核心返回字段(店铺商品)

表格

字段 含义 解析方式
num_iid 商品唯一 ID 直接取值,用于后续详情查询
title 商品标题 包含品牌、型号、规格等信息
price 商品售价 字符串类型,需转 float 计算
stock 库存数量 商家接口返回真实库存,第三方接口可能为空
volume 销量 30 天销量 / 总销量(平台规则)
sku SKU 规格信息 需单独解析,包含颜色、尺寸、内存等
pic_url 主图链接 可直接访问的商品主图
category_id 类目 ID 用于商品分类归类
publish_time 发布时间 商品上架时间

2. 分页参数

  • page_no:页码,从 1 开始
  • page_size:每页条数,淘宝 API 最大支持200 条 / 页,推荐 100-200,平衡请求效率与响应体积
  • 分页终止:当返回的商品列表为空,或商品总数 ≤ (页码 - 1)* 每页条数时,停止采集

六、限流与风控规避(重要)

淘宝 API 对接口调用频率有严格限制,需遵守以下规则避免封禁:

  1. 频率限制
  • 个人开发者:QPS≤2,日调用量≤1000
  • 企业开发者:QPS≤50,日调用量≤10000(可申请提升)
  • 商家专属接口:按店铺授权额度限制,建议1 秒 1 次
  1. 限流处理
  • 429(限流)、10003(频率超限)错误,立即停止请求,指数退避重试(1s→2s→4s→8s)
  • 批量采集时,每获取 1 页数据,休眠 1-2 秒
  1. IP 与设备风控
  • 避免单 IP 高频请求,商用场景建议使用静态代理 IP
  • 多店铺采集时,轮换不同 AppKey / 设备信息

七、常见问题与解决方案

  1. 权限不足(403 错误)
  • 原因:未申请接口权限、授权 token 失效
  • 解决:在开放平台补全接口权限,重新获取 access_token
  1. 接口返回空数据
  • 原因:店铺无在售商品、分页参数错误、店铺昵称错误
  • 解决:核对店铺账号,调整page_no/status参数
  1. SKU 数据缺失
  • 原因:未在fields中指定sku字段
  • 解决:请求时fields添加sku参数,单独解析 SKU 数组
  1. 数据量过大(超 10 万条)
  • 原因:店铺商品数过多,单脚本采集效率低
  • 解决:分布式采集(多线程 / 多进程)、分时段采集、增量更新(仅获取新增 / 修改商品)

八、扩展方向

  1. 数据存储:将解析后的商品数据存入MySQL/PostgreSQL,建立商品数据表,支持快速查询
  2. 实时监控:结合定时任务(如 APScheduler),定期采集店铺商品,实现价格、库存变动监控
  3. SKU 精细化解析:单独调用taobao.item.sku.get接口,获取 SKU 详细规格、价格、库存
  4. 跨平台整合:结合京东、拼多多 API,实现多平台店铺商品统一管理

九、合规声明

  1. 淘宝 API 数据采集需遵守淘宝开放平台用户协议,仅用于合法商业 / 学习场景,禁止批量倒卖数据、破坏平台规则
  2. 非商家授权采集竞品商品时,需控制频率,避免对平台服务器造成压力
  3. 商用场景建议联系淘宝商务,获取官方授权接口,降低合规风险
相关文章
|
6天前
|
人工智能 JSON 监控
Claude Code 源码泄露:一份价值亿元的 AI 工程公开课
我以为顶级 AI 产品的护城河是模型。读完这 51.2 万行泄露的源码,我发现自己错了。
4310 17
|
16天前
|
人工智能 JSON 机器人
让龙虾成为你的“公众号分身” | 阿里云服务器玩Openclaw
本文带你零成本玩转OpenClaw:学生认证白嫖6个月阿里云服务器,手把手配置飞书机器人、接入免费/高性价比AI模型(NVIDIA/通义),并打造微信公众号“全自动分身”——实时抓热榜、AI选题拆解、一键发布草稿,5分钟完成热点→文章全流程!
14940 138
让龙虾成为你的“公众号分身” | 阿里云服务器玩Openclaw
|
5天前
|
人工智能 数据可视化 安全
王炸组合!阿里云 OpenClaw X 飞书 CLI,开启 Agent 基建狂潮!(附带免费使用6个月服务器)
本文详解如何用阿里云Lighthouse一键部署OpenClaw,结合飞书CLI等工具,让AI真正“动手”——自动群发、生成科研日报、整理知识库。核心理念:未来软件应为AI而生,CLI即AI的“手脚”,实现高效、安全、可控的智能自动化。
3097 8
王炸组合!阿里云 OpenClaw X 飞书 CLI,开启 Agent 基建狂潮!(附带免费使用6个月服务器)
|
7天前
|
人工智能 自然语言处理 数据挖掘
零基础30分钟搞定 Claude Code,这一步90%的人直接跳过了
本文直击Claude Code使用痛点,提供零基础30分钟上手指南:强调必须配置“工作上下文”(about-me.md+anti-ai-style.md)、采用Cowork/Code模式、建立标准文件结构、用提问式提示词驱动AI理解→规划→执行。附可复制模板与真实项目启动法,助你将Claude从聊天工具升级为高效执行系统。
|
6天前
|
人工智能 定位技术
Claude Code源码泄露:8大隐藏功能曝光
2026年3月,Anthropic因配置失误致Claude Code超51万行源码泄露,意外促成“被动开源”。代码中藏有8大未发布功能,揭示其向“超级智能体”演进的完整蓝图,引发AI编程领域震动。(239字)
2448 9