Python结合淘宝关键词API进行商品数据挖掘与

你想要用 Python 结合淘宝关键词 API 实现商品数据挖掘,我会帮你完成从接口准备、数据请求、解析清洗到简单挖掘分析的全流程,全程兼顾新手可操作性和挖掘的实用性,同时延续之前的第三方接口方案(避开官方接口的企业资质限制)。

一、先明确核心前提

  1. 淘宝无公开通用的「关键词商品搜索 API」,个人开发者入门仍采用第三方开放接口(以聚合数据为例,支持淘宝关键词搜索,免费试用,无需企业资质);
  2. 本次数据挖掘的核心流程:关键词传入API → 获取商品列表数据 → 数据清洗去重 → 核心维度挖掘分析(价格、销量、标题关键词) → 结果可视化/保存
  3. 必备 Python 库:requests(请求接口)、pandas(数据清洗 / 分析)、matplotlib(简单可视化,可选)、jieba(标题关键词分词,可选)。

二、前置准备工作

1. 安装必备 Python 库

bash

运行

复制代码
# 核心库:请求接口+数据处理
pip install requests pandas

# 可选库:数据可视化+中文分词(挖掘用)
pip install matplotlib jieba
2. 获取第三方关键词搜索 API 密钥(聚合数据)
  1. 关注博主,搜索「淘宝商品搜索」(支持关键词查询);
  2. 免费领取接口,完成个人实名认证,获取AppKey(接口调用密钥,后续代码需用到);
  3. 查看接口文档,确认核心信息:
    • 请求地址:
    • 请求方式:GET
    • 必填参数:key(AppKey)、q(搜索关键词,如「无线耳机」)
    • 可选参数:page(页码)、page_size(每页商品数)、sort(排序方式,如销量排序)
3. 明确挖掘目标(新手优先落地)

本次聚焦 3 个核心挖掘维度,避免过于复杂:

  1. 商品价格分布(了解该关键词下商品的价格区间、均价);
  2. 商品销量排名(筛选热门商品,找出销量 TOP10);
  3. 商品标题高频关键词(挖掘用户关注的核心卖点,如「降噪」「无线」)。

三、步骤 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()
代码关键说明
  1. 参数配置 :仅需修改APP_KEYKEYWORDsort参数可切换排序方式,方便针对性挖掘(如按销量挖掘热门商品,按价格挖掘低价商品);
  2. 数据清洗 :核心是「格式转换」(价格 / 销量转为数值类型,方便后续计算)和「去重」(根据商品 IDnum_iid,避免重复数据影响分析结果);
  3. 返回 DataFramepandas的 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文件!")
挖掘逻辑说明
  1. 价格分布分析:通过统计指标(均价、中位数、区间)了解商品价格整体情况,通过直方图直观查看价格集中区间(如无线耳机多集中在 50-200 元);
  2. 销量 TOP10 分析:按销量排序筛选热门商品,可快速发现市场认可的爆款,同时查看爆款的价格和店铺,挖掘潜在规律;
  3. 标题高频关键词分析 :通过jieba分词统计词频,挖掘用户关注的核心卖点(如无线耳机的「降噪」「蓝牙 5.3」「超长续航」),为选品、标题优化提供参考;
  4. 结果保存:将所有挖掘结果保存到 Excel,方便后续离线分析和整理。

五、常见问题与解决方案

  1. 中文可视化乱码 :通过plt.rcParams设置黑体字体,解决 matplotlib 中文显示问题,若仍乱码,需确保本地环境有 SimHei 字体;
  2. 销量数据处理异常:第三方接口返回的销量可能带「万 +」「千 +」,代码中已做简单处理,若有特殊格式,可扩展字符串处理逻辑;
  3. 分词结果不准确 :可扩展停用词表(如添加更多无意义词汇),或使用jieba的自定义词典,提升分词精度;
  4. 接口调用频率限制 :免费版接口有调用次数限制(一般每分钟 10 次以内),避免频繁运行代码,多页采集时可添加time.sleep()控制频率。

六、进阶挖掘方向(新手后续可拓展)

  1. 多页数据采集 :循环修改page参数,采集多页商品数据(如 10 页 300 条),提升挖掘结果的准确性;
  2. 价格与销量相关性分析 :通过pandas计算价格与销量的相关系数,查看是否「低价商品销量更高」;
  3. 店铺分析:统计店铺的商品数量、平均销量,挖掘头部店铺的运营规律;
  4. 数据可视化优化 :使用seaborn替代matplotlib,绘制更美观的图表,或使用pyecharts制作交互式图表。

总结

  1. 淘宝关键词商品数据挖掘的核心流程是「接口请求 → 数据清洗 → 维度分析 → 结果可视化 / 保存」,新手可优先落地 3 个核心挖掘维度;
  2. 本次代码可直接复制使用,仅需修改APP_KEYKEYWORD,即可完成从数据获取到挖掘分析的全流程,且结果保存为 Excel 和图片,便于后续整理;
  3. 第三方接口适合入门学习,商业场景需对接淘宝开放平台合规接口,挖掘时需注意数据量和调用频率,避免违规。
相关推荐
梦因you而美1 小时前
Python win32com操作Excel:彻底禁用链接更新及各类弹窗(实测有效)
python·excel·win32com·禁用链接更新·excel弹框
天天进步20151 小时前
Motia性能进阶与未来:从现有源码推测 Rust 重构之路
开发语言·重构·rust
星空下的月光影子1 小时前
易语言开发从入门到精通:补充篇·办公+桌面自动化深度实战·Word/Excel/PDF联合处理·模拟键鼠·消息推送·定时任务调度
开发语言
兩尛1 小时前
2. 两数相加 c++
开发语言·c++
Z9fish1 小时前
sse哈工大C语言编程练习22
c语言·开发语言·算法
小二·1 小时前
Go 语言系统编程与云原生开发实战(第12篇)云原生部署实战:Helm Chart × GitOps × 多环境管理(生产级落地)
开发语言·云原生·golang
小二·1 小时前
Go 语言系统编程与云原生开发实战(第13篇)工程效能实战:Monorepo × 依赖治理 × 构建加速(10万行代码实测)
开发语言·云原生·golang
暴躁小师兄数据学院2 小时前
【WEB3.0零基础转行笔记】Golang编程篇-第4讲:Go语言中的流程控制
开发语言·后端·golang·web3·区块链
j445566112 小时前
C++中的备忘录模式
开发语言·c++·算法