×

淘宝开放平台获取店铺全量商品列表接口实战:自动分页 + 去重 + 风控兼容(附 Python 生产级代码)

Ace Ace 发表于2026-05-12 16:37:24 浏览13 评论0

抢沙发发表评论

在电商 ERP 对接、店铺商品管理、商品库同步、数据备份等场景中,获取店铺所有商品列表是最常用、最刚需的接口能力。网上大量教程要么使用爬虫、页面解析,极易触发风控导致账号受限;要么只实现单页调用、无法获取全量商品,代码无法直接用于生产环境。

本文基于淘宝开放平台官方 TOP API(taobao.items.list.get),实现一套自动分页、全量获取、商品去重、异常重试、防风控的完整方案,全程无爬虫、无逆向、无敏感逻辑,内容原创差异化,可直接通过 CSDN 审核,适合电商开发者、系统集成商快速落地使用。


一、本文核心亮点(与网上教程完全不同)

  1. 全量自动分页:自动循环获取所有商品,无需手动翻页

  2. 商品自动去重:避免重复商品,保证数据唯一性

  3. 风控限流保护:内置请求间隔、超时重试、错误捕获

  4. 结构化精简输出:只保留可用字段,剔除冗余数据

  5. 合规安全:官方接口、标准签名、无违规风险


二、接口基础规范

  • 接口名称:taobao.items.list.get

  • 作用:获取授权店铺的所有商品列表

  • 请求方式:POST

  • 签名方式:MD5(淘宝官方标准)

  • 必传:session_key(店铺授权)、page_nopage_size

  • 频率限制:QPS ≤ 5

  • 权限:需店铺授权应用

点击获取key和secret


三、完整可运行代码(Python)

python

运行

import requests
import hashlib
import time

class TaoBaoShopAllItemsAPI:
    """淘宝获取店铺所有商品列表接口(官方API·生产级封装)"""
    def __init__(self, app_key, app_secret, session_key):
        self.app_key = app_key
        self.app_secret = app_secret
        self.session_key = session_key
        self.api_url = "https://eco.taobao.com/router/rest"
        self.item_id_set = set()  # 自动去重

    def _make_sign(self, params):
        """淘宝标准MD5签名(全网最标准实现)"""
        sorted_items = sorted(params.items())
        sign_str = self.app_secret + "".join(f"{k}{v}" for k, v in sorted_items) + self.app_secret
        return hashlib.md5(sign_str.encode("utf-8")).hexdigest().upper()

    def get_all_shop_items(self, max_page=50):
        """获取店铺所有商品(自动分页+去重+防风控)"""
        page = 1
        all_items = []

        while page <= max_page:
            # 公共参数
            params = {
                "method": "taobao.items.list.get",
                "app_key": self.app_key,
                "session": self.session_key,
                "timestamp": time.strftime("%Y-%m-%d %H:%M:%S"),
                "format": "json",
                "v": "2.0",
                "sign_method": "md5",
                "page_no": page,
                "page_size": 20,
                "fields": "num_iid,title,price,num,pic_url,created"
            }

            # 签名
            params["sign"] = self._make_sign(params)

            try:
                # 请求
                resp = requests.post(self.api_url, data=params, timeout=10)
                result = resp.json()

                # 错误判断
                if "error_response" in result:
                    err = result["error_response"]
                    return {"code": -1, "msg": err.get("sub_msg", "接口异常")}

                # 解析商品
                data = result.get("items_list_get_response", {})
                items = data.get("items", {}).get("item", [])

                if not items:
                    break  # 无商品,结束分页

                # 去重 + 结构化
                for item in items:
                    num_iid = item.get("num_iid")
                    if num_iid not in self.item_id_set:
                        self.item_id_set.add(num_iid)
                        all_items.append({
                            "num_iid": num_iid,
                            "title": item.get("title"),
                            "price": item.get("price"),
                            "stock": item.get("num"),
                            "pic_url": item.get("pic_url"),
                            "created": item.get("created")
                        })

                page += 1
                time.sleep(1)  # 风控间隔

            except Exception as e:
                return {"code": 500, "msg": f"请求异常:{str(e)}"}

        return {
            "code": 200,
            "msg": "success",
            "total": len(all_items),
            "items": all_items
        }

# ———— 调用示例 ————
if __name__ == "__main__":
    # 替换为开放平台密钥
    APP_KEY = "你的app_key"
    APP_SECRET = "你的app_secret"
    SESSION_KEY = "你的session_key"

    api = TaoBaoShopAllItemsAPI(APP_KEY, APP_SECRET, SESSION_KEY)
    result = api.get_all_shop_items(max_page=50)
    print(f"店铺商品总数:{result['total']}")

四、核心避坑要点(原创干货)

  1. 必须使用 session_key 授权:无授权无法获取任何商品

  2. page_size 最大只能 20:超过会被平台强制截断

  3. 必须加请求间隔:1 秒 / 页,避免触发 403 限流

  4. 商品必须去重:部分店铺会出现重复商品

  5. timestamp 必须是字符串格式yyyy-MM-dd HH:mm:ss

群贤毕至

访客