淘宝商品详情数据解析是从 API 返回的原始数据中提取、清洗、结构化核心字段,并转化为可用于分析 / 决策的有效信息的过程,核心是解决「字段多、嵌套深、格式不统一」的问题。以下从数据结构拆解、核心字段解析、通用解析流程、实战代码示例四个维度展开。
一、 淘宝商品详情 API 返回数据结构(以taobao.item.get为例)
API 返回的是嵌套 JSON 结构,分为响应头和响应体两部分,核心数据在
item_get_response.item节点下。json
{
"item_get_response": {
"item": {
"num_iid": "123456789", // 商品ID(核心主键)
"title": "2025新款智能手表 心率监测 14天续航", // 商品标题
"price": "399.00", // 商品价格(主价)
"volume": "5000", // 30天销量
"stock": "1000", // 库存
"good_rate": "98.5", // 好评率
"seller_id": "987654321", // 卖家ID
"shop_name": "XX数码旗舰店", // 店铺名称
"skus": { // SKU列表(嵌套结构)
"sku": [
{"sku_id": "111", "price": "379.00", "stock": "500", "properties": "颜色:黑色;尺寸:标准版"},
{"sku_id": "222", "price": "429.00", "stock": "300", "properties": "颜色:银色;尺寸:运动版"}
]
},
"promotion_info": { // 促销信息
"is_on_sale": "true",
"discount": "满300减30"
},
"item_imgs": { // 商品图片
"item_img": [{"url": "https://xxx.jpg"}, {"url": "https://yyy.jpg"}]
}
}
},
"request_id": "abc123" // 请求ID(用于排查问题)}二、 核心字段分类与解析要点
按业务用途可将字段分为基础信息、交易信息、SKU 信息、营销信息、媒体信息五大类,解析时需注意格式转换与异常处理。
| 字段分类 | 核心字段 | 解析要点 | 业务价值 |
|---|---|---|---|
| 基础信息 | num_iid title seller_id shop_name | 1. num_iid作为唯一主键,去重依据2. title清洗特殊字符(如🔥、【】),提取关键词 | 商品唯一标识、店铺关联 |
| 交易信息 | price volume stock good_rate | 1. price转float类型,处理 “券后价”“补贴价” 等特殊表述2. volume为 30 天销量,需区分 “付款人数” 和 “销量”3. stock为空时填充为 0 | 定价分析、库存预警、热销判断 |
| SKU 信息 | skus.sku(sku_id price properties) | 1. 拆分properties(如 “颜色:黑色;尺寸:标准版”→ 字典{"颜色":"黑色","尺寸":"标准版"})2. 提取 SKU 级价格 / 库存,计算最低价 / 最高价 | 精细化定价、库存分层管理 |
| 营销信息 | promotion_info | 1. 解析满减、优惠券、秒杀等规则2. 判断是否处于促销期 | 竞品促销监控、调价策略 |
| 媒体信息 | item_imgs video | 1. 提取主图、详情图 URL2. 过滤无效图片链接 | 内容分析、商品视觉对标 |
三、 通用数据解析流程(4 步标准化)
无论用于选品、竞品监控还是评价分析,解析流程都遵循以下 4 个步骤,确保数据质量。
步骤 1: 数据提取(从 JSON 中提取核心节点)
优先提取
item节点,处理 API 调用失败的情况(如返回error_response);对嵌套字段(如
skusitem_imgs)做判空处理,避免KeyError。
步骤 2: 格式标准化(统一数据类型)
数值型字段:
price/volume/stock/good_rate转为float/int,缺失值填充(如库存填充 0,好评率填充 90%);文本型字段:
title/properties去除特殊字符、多余空格,统一编码为 UTF-8;日期型字段(如
create_time):统一格式为YYYY-MM-DD HH:MM:SS。
步骤 3: 特征衍生(从原始字段提取分析维度)
这是解析的核心价值环节,通过衍生特征支撑后续分析:
标题特征:从
title提取关键词(如 “智能”“续航”“防水”),标记商品属性;价格特征:计算 SKU 最低价 / 最高价,判断价格带(如 “100-200 元”“200-300 元”);
库存特征:计算库存周转率(销量 / 库存),标记滞销 / 热销 SKU;
促销特征:标记是否有满减 / 优惠券,计算折扣力度(如满 300 减 30 → 折扣率 10%)。
步骤 4: 数据校验(过滤无效数据)
设置校验规则,剔除无价值数据:
过滤
price=0或volume<10的低价值商品;过滤
stock=0的下架商品;去重:按
num_iid+crawl_time删除重复记录。
四、 实战解析代码(Python 版)
以下是可直接运行的解析代码,包含数据提取、标准化、特征衍生、校验全流程。
python
运行
import jsonimport reimport pandas as pddef parse_taobao_item(raw_json_str):
"""
解析淘宝商品详情API返回的JSON数据
:param raw_json_str: API返回的原始JSON字符串
:return: 结构化的商品字典
"""
# 步骤1:解析JSON并提取核心节点
try:
raw_data = json.loads(raw_json_str)
# 处理API调用失败情况
if "error_response" in raw_data:
print(f"API调用失败:{raw_data['error_response']['msg']}")
return None
item = raw_data["item_get_response"]["item"]
except Exception as e:
print(f"JSON解析失败:{e}")
return None
# 步骤2:基础字段提取与标准化
parsed_item = {
"num_iid": item.get("num_iid", ""),
"title": clean_title(item.get("title", "")),
"shop_name": item.get("shop_name", ""),
"seller_id": item.get("seller_id", ""),
# 数值字段标准化
"price": float(item.get("price", 0)),
"volume": int(item.get("volume", 0)),
"stock": int(item.get("stock", 0)),
"good_rate": float(item.get("good_rate", 90.0))
}
# 步骤3:SKU信息解析与衍生特征
sku_list = item.get("skus", {}).get("sku", [])
sku_parsed = []
sku_prices = []
for sku in sku_list:
sku_dict = {
"sku_id": sku.get("sku_id", ""),
"sku_price": float(sku.get("price", 0)),
"sku_stock": int(sku.get("stock", 0)),
"properties": parse_sku_properties(sku.get("properties", ""))
}
sku_parsed.append(sku_dict)
sku_prices.append(sku_dict["sku_price"])
# 衍生SKU价格特征
parsed_item["sku_list"] = sku_parsed
parsed_item["min_sku_price"] = min(sku_prices) if sku_prices else parsed_item["price"]
parsed_item["max_sku_price"] = max(sku_prices) if sku_prices else parsed_item["price"]
# 步骤4:促销信息解析
promotion = item.get("promotion_info", {})
parsed_item["is_promotion"] = promotion.get("is_on_sale", "false") == "true"
parsed_item["discount"] = promotion.get("discount", "无")
# 步骤5:数据校验
if not check_item_valid(parsed_item):
return None
return parsed_itemdef clean_title(title):
"""清洗商品标题:去除特殊字符"""
# 去除emoji、特殊符号
pattern = re.compile(r"[^\u4e00-\u9fa5a-zA-Z0-9\s]")
return pattern.sub("", title).strip()def parse_sku_properties(properties_str):
"""拆分SKU属性字符串为字典"""
props = {}
if not properties_str:
return props for prop in properties_str.split(";"):
if ":" in prop:
k, v = prop.split(":", 1)
props[k.strip()] = v.strip()
return propsdef check_item_valid(parsed_item):
"""校验数据有效性"""
# 过滤无商品ID、价格为0、销量过低的商品
if not parsed_item["num_iid"]:
return False
if parsed_item["price"] <= 0:
return False
if parsed_item["volume"] < 10:
return False
return True# 示例:测试解析if __name__ == "__main__":
# 模拟API返回的JSON字符串
raw_json = '''{
"item_get_response": {"item": {"num_iid": "123456789", "title": "【新品】智能手表🔥399元", "price": "399.00", "volume": "5000", "stock": "1000", "good_rate": "98.5", "shop_name": "XX数码店", "skus": {"sku": [{"sku_id": "111", "price": "379", "properties": "颜色:黑色;尺寸:标准版"}]}, "promotion_info": {"is_on_sale": "true", "discount": "满300减30"}}}
}'''
result = parse_taobao_item(raw_json)
print("解析后的数据:")
print(json.dumps(result, ensure_ascii=False, indent=2))五、 高级解析技巧与注意事项
批量解析优化:用
pandas将多个商品解析结果转为 DataFrame,提升批量处理效率;嵌套字段处理:对
item_imgsvideos等列表字段,可提取前 3 张主图 URL,减少数据量;异常容错:对 API 返回的非标准字段(如
price为 “面议”),需单独处理,避免类型转换报错;合规性处理:若数据包含用户评价中的个人信息(如昵称),需进行脱敏(如 “张 **”)。