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 返回的特殊字段(如促销价格、运费模板)解析代码」,或「解析结果可视化(如价格 / 库存统计图表)」的实现方案。

相关文章
|
3月前
|
JSON 监控 供应链
天猫商品详情API技术文档:智能电商开发的必备工具
天猫商品详情API(tmall.item_get)通过商品ID实时获取标题、价格、库存、SKU、评价等结构化数据,支持JSON格式返回,适用于电商分析、竞品监控与价格优化,需授权访问,可按需筛选字段,提升数据传输效率。
|
6月前
|
存储 人工智能 文字识别
从零开始打造AI测试平台:文档解析与知识库构建详解
AI时代构建高效测试平台面临新挑战。本文聚焦AI问答系统知识库建设,重点解析文档解析关键环节,为测试工程师提供实用技术指导和测试方法论
|
4月前
|
人工智能 搜索推荐 数据挖掘
2025做SEO 要花多少钱?收费标准超清楚!
SEO起源于美国,2015年后在中国逐渐专业化。因Google技术成熟,外贸网站排名多被国外占据,新站需系统化投入才能超越。SEO费用无统一标准,受行业、预算、目标等多因素影响,月费通常500至1万美元。企业应视其为长期投资,合理规划预算,选择可靠服务商或工具入行。
|
设计模式 负载均衡 网络协议
【分布式技术专题】「分布式技术架构」实践见真知,手把手教你如何实现一个属于自己的RPC框架(架构技术引导篇)
【分布式技术专题】「分布式技术架构」实践见真知,手把手教你如何实现一个属于自己的RPC框架(架构技术引导篇)
884 0
|
26天前
|
自然语言处理 物联网 计算机视觉
从 Image-to-LoRA 到 In-Context Edit
阿里发布Qwen-Image-Edit-2511-ICEdit-LoRA模型,通过上下文内编辑技术,利用“编辑前后图像对”实现图像编辑能力迁移。该模型仅需少量样本即可训练,支持风格、光照、表情等复杂编辑,并可拓展至图像分割等视觉任务,未来将持续优化与应用探索。
338 6
|
26天前
|
人工智能 编解码 数据可视化
国赛发布|米兰设计周X阿里云全民运动AIGC创作大赛命题策略单来啦
“全民运动AIGC创作大赛”由米兰设计周组委会与阿里云联合主办,鼓励高校师生及设计师运用AI技术创作体育主题作品。赛事聚焦冰雪、水上、团体及个人运动,倡导科技与人文融合,提供算力支持与创作平台,推动运动文化传播。投稿时间至2026年5月31日。
|
前端开发 程序员 开发工具
解决Material Theme UI插件收费问题
解决Material Theme UI插件收费问题
解决Material Theme UI插件收费问题
|
26天前
|
存储 弹性计算 人工智能
2026年阿里云服务器专属活动,爆款直降活动内容与云服务器活动价格参考
阿里云推出的弹性计算云服务器爆款直降活动,是云服务器ECS产品专属活动,2026年,这个活动中既有轻量应用服务器38元抢购,也有年度爆款服务器经济型e实例2核2G3M带宽 40G ESSD Entry云盘特惠价99元1年,还有通用算力型u2a实例指定配置2.5折,更强劲、更安全、更划算的第9代计算型c9i、通用型g9i、内存型r9i云服务器年付6.4折起等活动内容。本位为大家介绍爆款直降的最新活动内容,以及活动内云服务器的活动价格,以供参考和选择。
137 3
|
26天前
|
Web App开发 Windows
【这玩意气死人了】如何关闭恶心的UC浏览器开机自动启动 解决方案在这里
UC浏览器或网盘开机自启令人困扰。可通过任务管理器“启动”选项卡禁用,或使用注册表编辑器删除`HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run`中含“UC”的项,彻底关闭自启动。
603 8
【这玩意气死人了】如何关闭恶心的UC浏览器开机自动启动 解决方案在这里
|
26天前
|
机器学习/深度学习 人工智能 自然语言处理
构建AI智能体:九十一、大模型三大适应技术详解:有监督微调、提示学习与语境学习
大模型应用并非高不可攀,有监督微调、提示学习与语境学习提供了低门槛落地路径。提示学习通过指令引导模型,零成本快速试用;语境学习借助示例让模型“即学即用”;有监督微调则通过数据训练打造专业模型,实现性能突破。三者层层递进,助力高效构建AI应用。
143 14