你想要用 Python 结合淘宝关键词 API 实现商品数据挖掘,我会帮你完成从接口准备、数据请求、解析清洗到简单挖掘分析的全流程,全程兼顾新手可操作性和挖掘的实用性,同时延续之前的第三方接口方案(避开官方接口的企业资质限制)。
一、先明确核心前提
- 淘宝无公开通用的「关键词商品搜索 API」,个人开发者入门仍采用第三方开放接口(以聚合数据为例,支持淘宝关键词搜索,免费试用,无需企业资质);
- 本次数据挖掘的核心流程:
关键词传入API → 获取商品列表数据 → 数据清洗去重 → 核心维度挖掘分析(价格、销量、标题关键词) → 结果可视化/保存; - 必备 Python 库:
requests(请求接口)、pandas(数据清洗 / 分析)、matplotlib(简单可视化,可选)、jieba(标题关键词分词,可选)。
二、前置准备工作
1. 安装必备 Python 库
bash
运行
# 核心库:请求接口+数据处理
pip install requests pandas
# 可选库:数据可视化+中文分词(挖掘用)
pip install matplotlib jieba
2. 获取第三方关键词搜索 API 密钥(聚合数据)
- 关注博主,搜索「淘宝商品搜索」(支持关键词查询);
- 免费领取接口,完成个人实名认证,获取AppKey(接口调用密钥,后续代码需用到);
- 查看接口文档,确认核心信息:
- 请求地址:
- 请求方式:
GET - 必填参数:
key(AppKey)、q(搜索关键词,如「无线耳机」) - 可选参数:
page(页码)、page_size(每页商品数)、sort(排序方式,如销量排序)
3. 明确挖掘目标(新手优先落地)
本次聚焦 3 个核心挖掘维度,避免过于复杂:
- 商品价格分布(了解该关键词下商品的价格区间、均价);
- 商品销量排名(筛选热门商品,找出销量 TOP10);
- 商品标题高频关键词(挖掘用户关注的核心卖点,如「降噪」「无线」)。
三、步骤 1:编写 Python 代码,请求关键词商品数据
完整代码(第一步:获取并解析商品数据)
python
运行
import requests
import pandas as pd
from datetime import datetime
def get_taobao_goods_by_keyword():
"""
调用第三方API,根据关键词获取淘宝商品数据
"""
# ---------------------- 需修改的参数 ----------------------
APP_KEY = "你的聚合数据AppKey" # 替换为自己的AppKey
KEYWORD = "无线耳机" # 替换为你要挖掘的关键词
PAGE = 1 # 页码,可修改实现多页采集
PAGE_SIZE = 30 # 每页商品数(免费版一般限制30条以内)
# ---------------------------------------------------------
# 1. 接口配置
url = "https://v.juhe.cn/taobao/unified/search"
params = {
"key": APP_KEY,
"q": KEYWORD,
"page": PAGE,
"page_size": PAGE_SIZE,
"sort": "sales" # 按销量排序(可选:price_asc 价格从低到高,price_desc 从高到低)
}
try:
# 2. 发送请求,获取响应
response = requests.get(url, params=params, timeout=30)
response.raise_for_status()
json_data = response.json() # 解析JSON数据
# 3. 判断接口调用是否成功
if json_data.get("error_code") == 0:
print(f"接口调用成功!已获取「{KEYWORD}」第{PAGE}页商品数据")
# 提取核心商品列表数据
goods_list = json_data.get("result", {}).get("goods", [])
if not goods_list:
print("未采集到商品数据")
return None
# 4. 数据清洗:提取需要的字段,剔除冗余信息
needed_fields = [
"title", "num_iid", "price", "sales", "shop_name", "pic_url"
]
formatted_goods = []
for goods in goods_list:
formatted_good = {field: goods.get(field, "") for field in needed_fields}
# 数据格式转换(避免后续分析报错:价格转浮点数,销量转整数)
try:
formatted_good["price"] = float(formatted_good["price"]) if formatted_good["price"] else 0.0
# 销量数据可能带"万+",简单处理(新手版)
sales_str = str(formatted_good["sales"]).replace("万", "").replace("+", "")
formatted_good["sales"] = float(sales_str) * 10000 if "万" in str(formatted_good["sales"]) else int(float(sales_str))
except:
formatted_good["price"] = 0.0
formatted_good["sales"] = 0
formatted_goods.append(formatted_good)
# 5. 转为DataFrame(方便后续挖掘分析)
goods_df = pd.DataFrame(formatted_goods)
# 去重(根据商品ID去重,避免重复数据)
goods_df = goods_df.drop_duplicates(subset=["num_iid"], keep="first")
print(f"数据清洗完成!有效商品数据共 {len(goods_df)} 条")
return goods_df
else:
print(f"接口调用失败:{json_data.get('reason', '未知错误')},错误码:{json_data.get('error_code')}")
return None
except requests.exceptions.Timeout:
print("错误:请求超时,请检查网络")
return None
except Exception as e:
print(f"错误:{e}")
return None
if __name__ == "__main__":
# 获取清洗后的商品数据
goods_dataframe = get_taobao_goods_by_keyword()
代码关键说明
- 参数配置 :仅需修改
APP_KEY和KEYWORD,sort参数可切换排序方式,方便针对性挖掘(如按销量挖掘热门商品,按价格挖掘低价商品); - 数据清洗 :核心是「格式转换」(价格 / 销量转为数值类型,方便后续计算)和「去重」(根据商品 ID
num_iid,避免重复数据影响分析结果); - 返回 DataFrame :
pandas的 DataFrame 是数据挖掘的核心载体,后续的所有分析操作都基于它展开,新手易上手。
四、步骤 2:商品数据核心挖掘分析(基于清洗后的数据)
在上述代码基础上,添加挖掘分析逻辑,实现 3 个核心目标,直接补充在if __name__ == "__main__"中即可。
python
运行
import jieba
import matplotlib.pyplot as plt
# 设置matplotlib中文显示(避免可视化中文乱码)
plt.rcParams["font.sans-serif"] = ["SimHei"] # 用黑体显示中文
plt.rcParams["axes.unicode_minus"] = False # 正常显示负号
if __name__ == "__main__":
goods_dataframe = get_taobao_goods_by_keyword()
if goods_dataframe is not None and len(goods_dataframe) > 0:
# ---------------------- 挖掘1:商品价格分布分析 ----------------------
print("\n=== 挖掘1:商品价格分布分析 ===")
# 计算价格核心统计指标
price_mean = goods_dataframe["price"].mean() # 均价
price_median = goods_dataframe["price"].median() # 中位数
price_min = goods_dataframe["price"].min() # 最低价
price_max = goods_dataframe["price"].max() # 最高价
price_std = goods_dataframe["price"].std() # 标准差(价格波动程度)
print(f"均价:{price_mean:.2f} 元")
print(f"价格中位数:{price_median:.2f} 元")
print(f"价格区间:{price_min:.2f} 元 - {price_max:.2f} 元")
print(f"价格波动标准差:{price_std:.2f} 元")
# 价格分布直方图(可视化,直观查看价格集中区间)
plt.figure(figsize=(10, 6))
plt.hist(goods_dataframe["price"], bins=10, color="skyblue", edgecolor="black", alpha=0.7)
plt.axvline(price_mean, color="red", linestyle="--", label=f"均价:{price_mean:.2f}元")
plt.xlabel("商品价格(元)")
plt.ylabel("商品数量")
plt.title(f"「{goods_dataframe['title'].iloc[0].split()[0]}」商品价格分布")
plt.legend()
plt.savefig("商品价格分布.png", dpi=300, bbox_inches="tight")
plt.show()
# ---------------------- 挖掘2:商品销量排名分析(TOP10) ----------------------
print("\n=== 挖掘2:商品销量TOP10 ===")
# 按销量降序排序,取前10
sales_top10 = goods_dataframe.sort_values(by="sales", ascending=False).head(10)
# 输出TOP10信息
for idx, (_, row) in enumerate(sales_top10.iterrows(), 1):
print(f"第{idx}名:{row['title'][:20]}... | 价格:{row['price']:.2f}元 | 销量:{row['sales']:,}件 | 店铺:{row['shop_name'][:15]}...")
# 销量TOP10柱状图(可视化)
plt.figure(figsize=(12, 6))
plt.bar(range(1, 11), sales_top10["sales"], color="orange", alpha=0.7)
plt.xticks(range(1, 11), [f"第{i}名" for i in range(1, 11)])
plt.xlabel("销量排名")
plt.ylabel("销量(件)")
plt.title("商品销量TOP10排名")
plt.savefig("商品销量TOP10.png", dpi=300, bbox_inches="tight")
plt.show()
# ---------------------- 挖掘3:商品标题高频关键词分析 ----------------------
print("\n=== 挖掘3:商品标题高频关键词 ===")
# 拼接所有商品标题
all_titles = " ".join(goods_dataframe["title"].tolist())
# 用jieba分词,剔除停用词(简单版,可扩展停用词表)
stop_words = ["的", "和", "与", "等", "一款", "包邮", "正品", "全新", "热销"]
words = [word for word in jieba.lcut(all_titles) if word not in stop_words and len(word) > 1]
# 统计词频
word_count = pd.Series(words).value_counts().head(15)
print("标题高频关键词TOP15:")
print(word_count)
# 高频关键词柱状图(可视化)
plt.figure(figsize=(12, 6))
word_count.plot(kind="bar", color="green", alpha=0.7)
plt.xlabel("关键词")
plt.ylabel("出现次数")
plt.title("商品标题高频关键词TOP15")
plt.xticks(rotation=45)
plt.savefig("商品标题高频关键词.png", dpi=300, bbox_inches="tight")
plt.show()
# ---------------------- 可选:保存挖掘结果到Excel ----------------------
with pd.ExcelWriter(f"淘宝{KEYWORD}商品挖掘结果_{datetime.now().strftime('%Y%m%d')}.xlsx") as writer:
goods_dataframe.to_excel(writer, sheet_name="原始清洗数据", index=False)
sales_top10.to_excel(writer, sheet_name="销量TOP10", index=False)
word_count.reset_index().to_excel(writer, sheet_name="标题高频关键词", index=False)
print(f"\n所有挖掘结果已保存至Excel文件!")
挖掘逻辑说明
- 价格分布分析:通过统计指标(均价、中位数、区间)了解商品价格整体情况,通过直方图直观查看价格集中区间(如无线耳机多集中在 50-200 元);
- 销量 TOP10 分析:按销量排序筛选热门商品,可快速发现市场认可的爆款,同时查看爆款的价格和店铺,挖掘潜在规律;
- 标题高频关键词分析 :通过
jieba分词统计词频,挖掘用户关注的核心卖点(如无线耳机的「降噪」「蓝牙 5.3」「超长续航」),为选品、标题优化提供参考; - 结果保存:将所有挖掘结果保存到 Excel,方便后续离线分析和整理。
五、常见问题与解决方案
- 中文可视化乱码 :通过
plt.rcParams设置黑体字体,解决 matplotlib 中文显示问题,若仍乱码,需确保本地环境有 SimHei 字体; - 销量数据处理异常:第三方接口返回的销量可能带「万 +」「千 +」,代码中已做简单处理,若有特殊格式,可扩展字符串处理逻辑;
- 分词结果不准确 :可扩展停用词表(如添加更多无意义词汇),或使用
jieba的自定义词典,提升分词精度; - 接口调用频率限制 :免费版接口有调用次数限制(一般每分钟 10 次以内),避免频繁运行代码,多页采集时可添加
time.sleep()控制频率。
六、进阶挖掘方向(新手后续可拓展)
- 多页数据采集 :循环修改
page参数,采集多页商品数据(如 10 页 300 条),提升挖掘结果的准确性; - 价格与销量相关性分析 :通过
pandas计算价格与销量的相关系数,查看是否「低价商品销量更高」; - 店铺分析:统计店铺的商品数量、平均销量,挖掘头部店铺的运营规律;
- 数据可视化优化 :使用
seaborn替代matplotlib,绘制更美观的图表,或使用pyecharts制作交互式图表。
总结
- 淘宝关键词商品数据挖掘的核心流程是「接口请求 → 数据清洗 → 维度分析 → 结果可视化 / 保存」,新手可优先落地 3 个核心挖掘维度;
- 本次代码可直接复制使用,仅需修改
APP_KEY和KEYWORD,即可完成从数据获取到挖掘分析的全流程,且结果保存为 Excel 和图片,便于后续整理; - 第三方接口适合入门学习,商业场景需对接淘宝开放平台合规接口,挖掘时需注意数据量和调用频率,避免违规。