淘宝商品数据清洗实战:从复杂JSON到结构化数据库(附Python脚本)
以下是一个淘宝商品数据清洗实战案例,包含从读取复杂 JSON 数据、清洗到存入结构化数据库(这里以 MySQL 为例)的完整过程,并附上 Python 脚本。
一、数据来源与目标
通常从淘宝开放平台获取的商品数据是 JSON 格式,内容涵盖商品基本信息(名称、价格、品牌等)、详情描述、图片链接、销售数据等诸多复杂嵌套结构。目标是将这些数据清洗整理成关系型数据库表结构,方便后续查询、分析与业务应用,例如构建商品推荐系统、销售数据分析平台等。
二、分析 JSON 数据结构
假设我们获取到的淘宝商品 JSON 样本如下(精简示意):
{
"item_id": "123456",
"title": "时尚女士连衣裙",
"price": "99.99",
"brand": "ABC",
"detail": {
"size": ["S", "M", "L"],
"color": ["红色", "蓝色"],
"material": "棉质"
},
"images": ["image1.jpg", "image2.jpg"],
"sales": {
"monthly": 100,
"total": 500
}
}
可以看出有基础属性字段(item_id
、title
、price
等),嵌套的详情字段(detail
内的 size
、color
、material
),图片列表字段(images
)以及销售数据字段(sales
)。不同商品 JSON 数据在结构上大体相似,但可能存在部分字段缺失或格式不一致情况。
三、数据清洗步骤
- 导入必要的库
import json
import mysql.connector
2.读取 JSON 文件
假设数据存储在 taobao_items.json
文件中:
with open('taobao_items.json', 'r', encoding='utf-8') as file:
data = json.load(file)
3.基础字段清洗与转换
- 价格字段可能包含货币符号,需要去除并转换为数值类型:
for item in data:
item['price'] = float(item['price'].replace('¥', ''))
确保 item_id
为字符串类型:
item['item_id'] = str(item['item_id'])
4.嵌套字段处理
对于 detail
字段,将其扁平化,方便存入数据库表:
for item in data:
detail = item['detail']
item['size'] = ', '.join(detail['size']) if 'size' in detail else None
item['color'] = ', '.join(detail['color']) if 'color' in detail else None
item['material'] = detail['material'] if 'material' in detail else None
del item['detail']
5.图片字段处理
将图片列表转换为字符串,以特定分隔符连接,便于存储:
for item in data:
item['images'] = ';'.join(item['images']) if 'images' in item else None
6.销售数据处理
可以计算一些衍生指标,如销售增长率等(这里简单示例):
for item in data:
sales = item['sales']
item['growth_rate'] = (sales['monthly'] / sales['total']) if sales['total'] > 0 else 0
del item['sales']
四、存入 MySQL 数据库
- 连接数据库
mydb = mysql.connector.connect(
host="localhost",
user="root",
password="your_password",
database="taobao_db"
)
mycursor = mydb.cursor()
2.创建表结构(如果不存在)
create_table_query = """
CREATE TABLE IF NOT EXISTS taobao_items (
item_id VARCHAR(255),
title VARCHAR(255),
price DECIMAL(10, 2),
brand VARCHAR(255),
size VARCHAR(255),
color VARCHAR(255),
material VARCHAR(255),
images VARCHAR(255),
growth_rate DECIMAL(10, 2)
)
"""
mycursor.execute(create_table_query)
3.插入数据
insert_query = """
INSERT INTO taobao_items (item_id, title, price, brand, size, color, material, images, growth_rate)
VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s)
"""
for item in data:
values = (
item['item_id'], item['title'], item['price'], item['brand'],
item['size'], item['color'], item['material'], item['images'],
item['growth_rate']
)
mycursor.execute(insert_query, values)
mydb.commit()
4.关闭连接
mycursor.close()
mydb.close()
通过以上步骤,就完成了从复杂淘宝商品 JSON 数据到结构化 MySQL 数据库表的清洗与存储过程,后续可基于该数据库表进行各种数据分析与业务操作。实际应用中,数据量往往巨大,还需考虑性能优化,如批量插入、索引优化等,同时针对更多复杂情况(如异常数据、重复数据处理)进一步完善代码逻辑。