Python解析淘宝商品详情API返回的JSON数据结构

简介: 你想通过 Python 解析淘宝商品详情 API 返回的 JSON 数据结构,核心是精准提取商品标题、价格、规格、库存等核心字段,并处理多层嵌套、字段缺失等常见问题。我会从数据结构分析、核心字段提取、异常处理、完整代码示例四个维度,给出可直接落地的解析方案。

你想通过 Python 解析淘宝商品详情 API 返回的 JSON 数据结构,核心是精准提取商品标题、价格、规格、库存等核心字段,并处理多层嵌套、字段缺失等常见问题。我会从数据结构分析、核心字段提取、异常处理、完整代码示例四个维度,给出可直接落地的解析方案。

一、淘宝商品详情 API 返回的 JSON 结构特征

淘宝商品详情 API(如开放平台的taobao.item.get接口)返回的 JSON 数据具有多层嵌套、字段标准化、部分字段可选的特点,核心结构分为「公共返回层」和「商品数据层」:

典型 JSON 结构示例

json

{
  "request_id": "123456789",  // 公共返回字段:请求ID
  "code": 0,                  // 公共返回字段:0=成功,非0=失败
  "msg": "success",           // 公共返回字段:提示信息
  "data": {                   // 核心商品数据层
    "item": {
      "num_iid": "1234567890",// 商品ID(唯一标识)
      "title": "2025新款夏季短袖T恤男女宽松纯棉百搭上衣", // 商品标题
      "price": "59.90",       // 商品价格(字符串类型,需转浮点数)
      "sales": "10000+",      // 销量
      "stock": 5000,          // 库存数量
      "item_imgs": [          // 商品图片列表(数组)
        {"url": "https://img1.xxx.com/xxx/1.jpg"},
        {"url": "https://img1.xxx.com/xxx/2.jpg"}
      ],
      "props": [              // 商品属性(如品牌、材质)
        {"name": "品牌", "value": "XX优选"},
        {"name": "材质", "value": "纯棉"}
      ],
      "sku_list": [           // SKU规格列表(可选,多规格商品才有)
        {
          "sku_id": "987654321",
          "sku_name": "白色-L",
          "sku_price": "59.90",
          "sku_stock": 1000
        },
        {
          "sku_id": "987654322",
          "sku_name": "黑色-M",
          "sku_price": "59.90",
          "sku_stock": 800
        }
      ],
      "seller": {             // 卖家信息(嵌套对象)
        "nick": "XX服饰旗舰店",
        "shop_id": "987654321",
        "score": 4.8          // 店铺评分
      },
      "shipping": {           // 物流信息(可选)
        "type": "包邮",
        "fee": "0.00"
      }
    }
  }
}

核心字段分类

字段层级 字段名 类型 说明
公共层 code/msg/request_id 整型 / 字符串 / 字符串 接口调用状态,优先校验code=0再解析数据
商品基础层 num_iid/title/price 字符串 / 字符串 / 字符串 核心标识与基础信息,price 需转浮点数
数组层 item_imgs/props/sku_list 数组 图片、属性、SKU 等列表数据
嵌套对象层 seller/shipping 对象 卖家、物流等子结构

二、Python 解析核心步骤与技巧

1. 基础解析:提取核心字段

使用 Python 内置的json模块解析 JSON 字符串,通过「键索引 + 循环」提取多层嵌套字段,核心技巧:

  • get()方法替代直接索引(避免字段缺失报错);
  • 数组字段通过循环遍历提取;
  • 数值型字符串(如 price)需转换为对应类型。

2. 异常处理:应对字段缺失 / 类型异常

淘宝 API 返回的部分字段(如sku_listshipping)仅在特定场景下存在,需处理:

  • 字段不存在:用get(key, 默认值)兜底;
  • 类型异常:用try-except捕获转换错误(如 price 非数字);
  • 数组为空:判断长度后再遍历。

三、完整解析代码示例

以下代码包含「JSON 解析、核心字段提取、异常处理、数据格式化」全流程,可直接复用:

python

运行

import json
def parse_taobao_item_json(json_str):
    """
    解析淘宝商品详情API返回的JSON数据
    :param json_str: API返回的JSON字符串
    :return: 格式化的商品数据字典(含核心字段)
    """
    # 初始化返回结果
    result = {
        "success": False,
        "error_msg": "",
        "item_data": {}
    }
    try:
        # 1. 解析JSON字符串
        data = json.loads(json_str)
        # 2. 校验接口调用是否成功
        if data.get("code") != 0:
            result["error_msg"] = f"API调用失败:{data.get('msg', '未知错误')}"
            return result
        # 3. 提取核心商品数据层(item)
        item = data.get("data", {}).get("item", {})
        if not item:
            result["error_msg"] = "未获取到商品数据"
            return result
        # 4. 提取基础字段(用get兜底,避免字段缺失)
        item_data = {
            "商品ID": item.get("num_iid", ""),
            "标题": item.get("title", ""),
            "价格": 0.0,
            "销量": item.get("sales", ""),
            "库存": item.get("stock", 0),
            "商品图片": [],
            "商品属性": {},
            "SKU列表": [],
            "卖家昵称": "",
            "店铺评分": 0.0,
            "物流类型": ""
        }
        # 5. 处理价格(字符串转浮点数,捕获异常)
        price_str = item.get("price", "0.00")
        try:
            item_data["价格"] = float(price_str)
        except (ValueError, TypeError):
            item_data["价格"] = 0.0
        # 6. 提取商品图片列表(数组遍历)
        item_imgs = item.get("item_imgs", [])
        for img in item_imgs:
            img_url = img.get("url", "")
            if img_url:
                item_data["商品图片"].append(img_url)
        # 7. 提取商品属性(数组转字典,便于查询)
        props = item.get("props", [])
        for prop in props:
            prop_name = prop.get("name", "")
            prop_value = prop.get("value", "")
            if prop_name:
                item_data["商品属性"][prop_name] = prop_value
        # 8. 提取SKU列表(多规格商品)
        sku_list = item.get("sku_list", [])
        for sku in sku_list:
            sku_info = {
                "SKU_ID": sku.get("sku_id", ""),
                "规格名称": sku.get("sku_name", ""),
                "规格价格": 0.0,
                "规格库存": 0
            }
            # SKU价格转换
            sku_price_str = sku.get("sku_price", "0.00")
            try:
                sku_info["规格价格"] = float(sku_price_str)
            except (ValueError, TypeError):
                sku_info["规格价格"] = 0.0
            # SKU库存
            sku_info["规格库存"] = sku.get("sku_stock", 0)
            item_data["SKU列表"].append(sku_info)
        # 9. 提取卖家信息(嵌套对象)
        seller = item.get("seller", {})
        item_data["卖家昵称"] = seller.get("nick", "")
        try:
            item_data["店铺评分"] = float(seller.get("score", 0.0))
        except (ValueError, TypeError):
            item_data["店铺评分"] = 0.0
        # 10. 提取物流信息(可选字段)
        shipping = item.get("shipping", {})
        item_data["物流类型"] = shipping.get("type", "不包邮")
        # 11. 解析成功,更新结果
        result["success"] = True
        result["item_data"] = item_data
    except json.JSONDecodeError:
        result["error_msg"] = "JSON格式解析失败"
    except Exception as e:
        result["error_msg"] = f"解析异常:{str(e)}"
    return result
# -------------------------- 测试示例 --------------------------
if __name__ == "__main__":
    # 模拟淘宝API返回的JSON字符串
    test_json = '''
    {
      "request_id": "123456789",
      "code": 0,
      "msg": "success",
      "data": {
        "item": {
          "num_iid": "1234567890",
          "title": "2025新款夏季短袖T恤男女宽松纯棉百搭上衣",
          "price": "59.90",
          "sales": "10000+",
          "stock": 5000,
          "item_imgs": [
            {"url": "https://img1.xxx.com/xxx/1.jpg"},
            {"url": "https://img1.xxx.com/xxx/2.jpg"}
          ],
          "props": [
            {"name": "品牌", "value": "XX优选"},
            {"name": "材质", "value": "纯棉"}
          ],
          "sku_list": [
            {
              "sku_id": "987654321",
              "sku_name": "白色-L",
              "sku_price": "59.90",
              "sku_stock": 1000
            },
            {
              "sku_id": "987654322",
              "sku_name": "黑色-M",
              "sku_price": "59.90",
              "sku_stock": 800
            }
          ],
          "seller": {
            "nick": "XX服饰旗舰店",
            "shop_id": "987654321",
            "score": 4.8
          },
          "shipping": {
            "type": "包邮",
            "fee": "0.00"
          }
        }
      }
    }
    '''
    # 调用解析函数
    parse_result = parse_taobao_item_json(test_json)
    # 输出解析结果
    if parse_result["success"]:
        print("✅ 解析成功:")
        for key, value in parse_result["item_data"].items():
            print(f"{key}: {value}")
    else:
        print(f"❌ 解析失败:{parse_result['error_msg']}")

代码关键说明

  1. 容错处理:所有字段提取均使用get()方法,避免KeyError;数值转换(如价格)加try-except,防止非数字字符串导致崩溃。
  2. 数据格式化
  • 商品属性从「数组」转为「字典」(如{"品牌": "XX优选"}),便于按属性名快速查询;
  • SKU 列表保留原结构,但统一字段名和数据类型,方便后续批量处理。
  1. 状态校验:先校验 API 返回的code字段,确保接口调用成功后再解析商品数据,避免无效解析。

四、扩展场景:批量解析与数据存储

若需批量解析多个商品的 JSON 数据,可基于上述函数扩展:

python

运行

def batch_parse_taobao_items(json_str_list):
    """批量解析多个淘宝商品JSON数据"""
    batch_result = []
    for json_str in json_str_list:
        item_result = parse_taobao_item_json(json_str)
        batch_result.append(item_result)
    return batch_result
# 示例:将解析结果存入CSV
import csv
def save_to_csv(item_data, csv_path):
    """将解析后的商品数据存入CSV"""
    # 定义CSV表头
    headers = ["商品ID", "标题", "价格", "销量", "库存", "卖家昵称", "物流类型"]
    # 提取数据行
    row = [
        item_data["商品ID"],
        item_data["标题"],
        item_data["价格"],
        item_data["销量"],
        item_data["库存"],
        item_data["卖家昵称"],
        item_data["物流类型"]
    ]
    # 写入CSV
    with open(csv_path, "a", encoding="utf-8-sig", newline="") as f:
        writer = csv.writer(f)
        # 首次写入表头(判断文件是否为空)
        import os
        if os.path.getsize(csv_path) == 0:
            writer.writerow(headers)
        writer.writerow(row)
# 调用示例
# save_to_csv(parse_result["item_data"], "淘宝商品数据.csv")

总结

Python 解析淘宝商品详情 API JSON 数据的核心要点:

  1. 容错优先:用get()替代直接索引,数值转换加异常捕获,应对字段缺失 / 类型异常;
  2. 分层解析:先校验公共返回字段(code/msg),再提取商品核心层,最后处理数组 / 嵌套对象;
  3. 格式统一:将数组型字段(如属性、SKU)转换为易使用的结构(字典 / 标准化列表),便于后续分析 / 存储。

如果需要,我可以补充「淘宝 API 返回的特殊字段(如促销价格、运费模板)解析代码」,或「解析结果可视化(如价格 / 库存统计图表)」的实现方案。

相关文章
|
5天前
|
存储 JavaScript 前端开发
JavaScript基础
本节讲解JavaScript基础核心知识:涵盖值类型与引用类型区别、typeof检测类型及局限性、===与==差异及应用场景、内置函数与对象、原型链五规则、属性查找机制、instanceof原理,以及this指向和箭头函数中this的绑定时机。重点突出类型判断、原型继承与this机制,助力深入理解JS面向对象机制。(238字)
|
3天前
|
云安全 人工智能 安全
阿里云2026云上安全健康体检正式开启
新年启程,来为云上环境做一次“深度体检”
1566 6
|
5天前
|
安全 数据可视化 网络安全
安全无小事|阿里云先知众测,为企业筑牢防线
专为企业打造的漏洞信息收集平台
1322 2
|
5天前
|
缓存 算法 关系型数据库
深入浅出分布式 ID 生成方案:从原理到业界主流实现
本文深入探讨分布式ID的生成原理与主流解决方案,解析百度UidGenerator、滴滴TinyID及美团Leaf的核心设计,涵盖Snowflake算法、号段模式与双Buffer优化,助你掌握高并发下全局唯一ID的实现精髓。
342 160
|
5天前
|
人工智能 自然语言处理 API
n8n:流程自动化、智能化利器
流程自动化助你在重复的业务流程中节省时间,可通过自然语言直接创建工作流啦。
404 6
n8n:流程自动化、智能化利器
|
7天前
|
人工智能 API 开发工具
Skills比MCP更重要?更省钱的多!Python大佬这观点老金测了一周终于懂了
加我进AI学习群,公众号右下角“联系方式”。文末有老金开源知识库·全免费。本文详解Claude Skills为何比MCP更轻量高效:极简配置、按需加载、省90% token,适合多数场景。MCP仍适用于复杂集成,但日常任务首选Skills。推荐先用SKILL.md解决,再考虑协议。附实测对比与配置建议,助你提升效率,节省精力。关注老金,一起玩转AI工具。
|
14天前
|
机器学习/深度学习 安全 API
MAI-UI 开源:通用 GUI 智能体基座登顶 SOTA!
MAI-UI是通义实验室推出的全尺寸GUI智能体基座模型,原生集成用户交互、MCP工具调用与端云协同能力。支持跨App操作、模糊语义理解与主动提问澄清,通过大规模在线强化学习实现复杂任务自动化,在出行、办公等高频场景中表现卓越,已登顶ScreenSpot-Pro、MobileWorld等多项SOTA评测。
1536 7
|
4天前
|
Linux 数据库
Linux 环境 Polardb-X 数据库 单机版 rpm 包 安装教程
本文介绍在CentOS 7.9环境下安装PolarDB-X单机版数据库的完整流程,涵盖系统环境准备、本地Yum源配置、RPM包安装、用户与目录初始化、依赖库解决、数据库启动及客户端连接等步骤,助您快速部署运行PolarDB-X。
246 1
Linux 环境 Polardb-X 数据库 单机版 rpm 包 安装教程
|
8天前
|
人工智能 前端开发 API
Google发布50页AI Agent白皮书,老金帮你提炼10个核心要点
老金分享Google最新AI Agent指南:让AI从“动嘴”到“动手”。Agent=大脑(模型)+手(工具)+协调系统,可自主完成任务。通过ReAct模式、多Agent协作与RAG等技术,实现真正自动化。入门推荐LangChain,文末附开源知识库链接。
668 119