在电商行业数字化转型加速的背景下,数据已成为驱动业务决策的核心资产。商品基础信息(如价格、销量、品类)反映了商品的核心属性与市场表现,而用户评论则蕴含着消费需求、产品痛点与满意度等关键信息。将两类数据整合分析,能为商家提供从 “商品优化” 到 “运营策略调整” 的全链路指导。本文将详细讲解如何通过爬虫爬取电商评论、调用 API 获取商品基础信息,并利用 Pandas 进行数据整合与深度分析,助力从业者实现数据驱动的业务进阶。

一、前期准备:工具与环境配置

在开展数据整合工作前,需搭建稳定的技术环境并准备必备工具,确保后续操作顺畅。

1.1 核心工具选型

  • Python:作为核心开发语言,提供丰富的库支持数据爬取、API 调用与分析,推荐使用 3.8 及以上版本。
  • 爬虫工具:requests(发送 HTTP 请求)、BeautifulSoup4(解析 HTML 页面)、Selenium(应对动态渲染页面,如 JavaScript 加载的评论)。
  • API 调用工具:requests(发送 API 请求)、json(解析 API 返回的 JSON 格式数据)。
  • 数据分析工具:Pandas(数据清洗、整合与分析)、Matplotlib/Seaborn(数据可视化,辅助分析结果呈现)。

1.2 环境配置步骤

  1. 安装依赖库:通过 Python 包管理工具pip安装所需库,执行以下命令:
    pip install requests beautifulsoup4 selenium pandas matplotlib seaborn
  2. API 密钥申请:以主流电商平台(如京东开放平台、淘宝开放平台)为例,注册开发者账号,创建应用并申请 API 密钥(AppKey、AppSecret),获取调用商品基础信息 API 的权限(需遵守平台 API 调用规范,避免超限)。
  3. 爬虫合规准备:查看目标电商平台的robots.txt协议,明确允许爬取的范围;设置合理的请求间隔(如 1-2 秒 / 次),避免给服务器造成压力,同时使用代理 IP 池(如阿布云、芝麻代理)降低 IP 被封禁的风险。

二、核心操作一:爬虫爬取电商评论

电商评论多以 HTML 静态页面或 JavaScript 动态加载形式呈现,需根据页面结构选择合适的爬取方案。本文以 “京东商品评论” 为例,演示静态页面爬取流程(动态页面可通过 Selenium 模拟浏览器渲染获取数据)。

2.1 分析评论页面结构

  1. 获取目标 URL:打开京东某商品详情页,进入 “评论区”,复制评论列表页的 URL(如
    https://item.jd.com/100012345678.html#comment

    )。
  1. 解析页面元素:通过浏览器 “开发者工具”(F12)查看评论数据的 HTML 结构:
    • 评论内容嵌套在div.comment-con标签中;
    • 评论评分对应i.star标签的class属性(如star5表示 5 星评分);
    • 评论时间存储在span.comment-time标签的文本中。

2.2 编写爬虫代码实现评论爬取

import requests
from bs4 import BeautifulSoup
import time
import csv

# 1. 配置请求头(模拟浏览器访问,避免被识别为爬虫)
headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36",
    "Referer": "https://item.jd.com/"  # Referer字段,模拟从商品详情页跳转至评论页
}

# 2. 定义评论爬取函数
def crawl_jd_comments(product_id, page_num, save_path):
    """
    爬取京东商品评论
    :param product_id: 商品ID(从商品详情页URL中提取,如100012345678)
    :param page_num: 需爬取的评论页数
    :param save_path: 评论数据保存路径(CSV格式)
    """
    # 打开CSV文件,准备写入数据
    with open(save_path, "w", encoding="utf-8", newline="") as f:
        writer = csv.DictWriter(f, fieldnames=["评论时间", "评分", "评论内容"])
        writer.writeheader()
        
        # 循环爬取多页评论
        for page in range(1, page_num + 1):
            # 构造评论页URL(京东评论页通过page参数控制分页)
            comment_url = f"https://club.jd.com/comment/productPageComments.action?productId={product_id}&score=0&sortType=5&page={page}&pageSize=10"
            try:
                # 发送请求获取页面数据
                response = requests.get(comment_url, headers=headers, timeout=10)
                response.raise_for_status()  # 若请求失败(如404、500),抛出异常
                comment_data = response.json()  # 京东评论API返回JSON格式数据
                
                # 解析评论数据
                comments = comment_data["comments"]
                for comment in comments:
                    comment_time = comment["creationTime"]  # 评论时间
                    score = comment["score"]  # 评分(1-5星)
                    comment_content = comment["content"].replace("\n", "")  # 评论内容(去除换行符)
                    
                    # 写入CSV文件
                    writer.writerow({
                        "评论时间": comment_time,
                        "评分": score,
                        "评论内容": comment_content
                    })
                print(f"第{page}页评论爬取完成")
                time.sleep(1.5)  # 设置请求间隔,避免被封禁IP
            
            except Exception as e:
                print(f"第{page}页评论爬取失败:{str(e)}")
                continue

# 3. 调用函数爬取评论(示例:爬取商品ID为100012345678的前10页评论)
crawl_jd_comments(product_id="100012345678", page_num=10, save_path="jd_comments.csv")

2.3 数据存储与校验

爬取的评论数据以 CSV 格式存储(便于后续 Pandas 读取),存储后需进行基础校验:

  • 检查 CSV 文件是否存在缺失值(如空评论内容、缺失评分);
  • 验证评论时间格式是否统一(如 “2024-05-20 14:30:00”),便于后续时间维度分析。

二、核心操作二:API 获取商品基础信息

相比爬虫,电商平台开放 API 能更稳定、合规地获取商品基础信息(如价格、销量、品牌、品类),且数据格式标准化,减少解析成本。本文以 “京东开放平台 API” 为例,演示商品基础信息的获取流程。

3.1 API 调用参数与签名生成

京东开放平台 API 调用需满足 “参数签名” 机制,确保请求合法性。核心参数包括:

  • appkey:开发者申请的 AppKey;
  • timestamp:当前时间戳(格式:yyyy-MM-dd HH:mm:ss);
  • sign:签名(通过 AppSecret 与请求参数按指定算法生成)。

3.2 编写 API 调用代码

import requests
import time
import hashlib
import csv

# 1. 配置API密钥(从京东开放平台获取)
APP_KEY = "your_app_key"
APP_SECRET = "your_app_secret"

# 2. 定义签名生成函数
def generate_sign(params, app_secret):
    """
    生成API请求签名(京东API签名规则:参数按字母排序+拼接AppSecret+MD5加密)
    :param params: 请求参数字典
    :param app_secret: AppSecret
    :return: 签名字符串
    """
    # 按参数名首字母升序排序
    sorted_params = sorted(params.items(), key=lambda x: x[0])
    # 拼接参数键值对(如"appkey=xxx&timestamp=xxx")
    sign_str = "&".join([f"{k}={v}" for k, v in sorted_params]) + app_secret
    # MD5加密并转为大写
    sign = hashlib.md5(sign_str.encode("utf-8")).hexdigest().upper()
    return sign

# 3. 定义商品基础信息获取函数
def get_product_base_info(product_ids, save_path):
    """
    调用京东API获取商品基础信息
    :param product_ids: 商品ID列表(如["100012345678", "100098765432"])
    :param save_path: 数据保存路径(CSV格式)
    """
    # API请求URL
    api_url = "https://api.jd.com/routerjson"
    
    # 打开CSV文件,准备写入数据
    with open(save_path, "w", encoding="utf-8", newline="") as f:
        writer = csv.DictWriter(f, fieldnames=["商品ID", "商品名称", "品牌", "价格", "销量", "品类"])
        writer.writeheader()
        
        for product_id in product_ids:
            # 1. 构造请求参数
            timestamp = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())
            params = {
                "appkey": APP_KEY,
                "method": "jd.union.open.goods.basic.info.get",  # 京东商品基础信息API接口名
                "timestamp": timestamp,
                "format": "json",
                "v": "1.0",
                "param": '{"skuIds":["' + product_id + '"]}'  # 商品ID参数(JSON格式)
            }
            
            # 2. 生成签名
            params["sign"] = generate_sign(params, APP_SECRET)
            
            try:
                # 3. 发送API请求
                response = requests.post(api_url, data=params, timeout=10)
                response.raise_for_status()
                result = response.json()
                
                # 4. 解析商品数据
                product_info = result["jd_union_open_goods_basic_info_get_response"]["result"]["data"][0]
                product_name = product_info["skuName"]  # 商品名称
                brand = product_info["brandName"]  # 品牌
                price = product_info["priceInfo"]["price"]  # 价格(元)
                sales = product_info["salesInfo"]["monthSales"]  # 月销量
                category = product_info["categoryInfo"]["categoryName"]  # 品类
                
                # 5. 写入CSV文件
                writer.writerow({
                    "商品ID": product_id,
                    "商品名称": product_name,
                    "品牌": brand,
                    "价格": price,
                    "销量": sales,
                    "品类": category
                })
                print(f"商品ID {product_id} 基础信息获取完成")
                time.sleep(1)  # 控制API调用频率,避免超限
            
            except Exception as e:
                print(f"商品ID {product_id} 信息获取失败:{str(e)}")
                continue

# 4. 调用函数获取商品基础信息(示例:获取2个商品的信息)
product_ids = ["100012345678", "100098765432"]
get_product_base_info(product_ids=product_ids, save_path="product_base_info.csv")

三、核心操作三:Pandas 数据整合与分析

获取评论数据(jd_comments.csv)与商品基础信息(product_base_info.csv)后,通过 Pandas 进行数据清洗、整合,并开展多维度分析,挖掘数据价值。

4.1 数据加载与预处理

首先加载两类数据,处理缺失值、重复值等问题,为后续分析奠定基础:

import pandas as pd
import matplotlib.pyplot as plt
import re
from collections import Counter
import jieba  # 中文分词库(需提前安装:pip install jieba)

# 设置中文字体(避免Matplotlib绘图中文乱码)
plt.rcParams["font.sans-serif"] = ["SimHei"]
plt.rcParams["axes.unicode_minus"] = False

# 1. 加载数据
comments_df = pd.read_csv("jd_comments.csv")  # 评论数据
product_df = pd.read_csv("product_base_info.csv")  # 商品基础信息数据

# 2. 数据预处理
# (1)评论数据预处理:处理缺失值、提取评论月份
comments_df = comments_df.dropna(subset=["评论内容", "评分"])  # 删除关键字段缺失的行
comments_df["评论月份"] = pd.to_datetime(comments_df["评论时间"]).dt.to_period("M")  # 提取评论月份(如2024-05)

# (2)商品数据预处理:处理价格格式(确保为数值型)
product_df["价格"] = pd.to_numeric(product_df["价格"], errors="coerce")  # 转换价格为数值型,无法转换的设为NaN
product_df = product_df.dropna(subset=["价格", "销量"])  # 删除价格/销量缺失的行

# 3. 数据整合:通过“商品ID”关联评论数据与商品基础信息
# (注:评论数据需先添加“商品ID”字段,可在爬虫阶段通过URL提取并写入)
comments_df["商品ID"] = "100012345678"  # 示例:为评论数据添加商品ID(实际需按爬取逻辑补充)
integrated_df = pd.merge(comments_df, product_df, on="商品ID", how="left")  # 左连接,保留所有评论

4.2 多维度数据分析

基于整合后的数据,开展 “商品表现分析”“用户评论分析”“关联分析” 三大维度分析,挖掘业务洞察。

4.2.1 商品表现分析:销量与价格相关性

分析商品销量与价格的关系,判断价格对销量的影响:

# 1. 计算各商品的销量-价格数据
sales_price_df = integrated_df[["商品ID", "商品名称", "价格", "销量"]].drop_duplicates()

# 2. 绘制销量-价格散点图
plt.figure(figsize=(10, 6))
plt.scatter(sales_price_df["价格"], sales_price_df["销量"], color="#1f77b4", s=80)
# 为每个点添加商品名称标签
for i, row in sales_price_df.iterrows():
    plt.annotate(row["商品名称"], (row["价格"], row["销量"]), 
                 xytext=(5, 5), textcoords="offset points", fontsize=9)
plt.xlabel("商品价格(元)")
plt.ylabel("月销量(件)")
plt.title("商品价格与月销量相关性分析")
plt.grid(alpha=0.3)
plt.savefig("price_sales_correlation.png", dpi=300, bbox_inches="tight")
plt.close()

# 3. 计算相关系数(量化价格与销量的线性关系)
correlation = sales_price_df["价格"].corr(sales_price_df["销量"])
print(f"商品价格与月销量的相关系数:{correlation:.4f}")
# 结果解读:若相关系数为负,说明价格越高,销量越低(符合一般消费规律);若接近0,说明价格对销量影响较小
4.2.2 用户评论分析:评分分布与关键词提取

通过评分分布了解用户满意度,通过评论关键词提取挖掘用户关注点:

# 1. 评论评分分布分析
score_counts = integrated_df["评分"].value_counts().sort_index()  # 统计各评分的评论数量
plt.figure(figsize=(8, 5))
score_counts.plot(kind="bar", color="#ff7f0e")
plt.xlabel("评论评分(星)")
plt.ylabel("评论数量")
plt.title("商品评论评分分布")
plt.xticks(rotation=0)
plt.grid(alpha=0.3, axis="y")
plt.savefig("comment_score_distribution.png", dpi=300, bbox_inches="tight")
plt.close()

# 计算平均评分
avg_score = integrated_df["评分"].mean()
print(f"商品平均评论评分:{avg_score:.2f} 星")

# 2. 评论关键词提取(基于中文分词)
# (1)定义停用词(过滤无意义词汇,如“的”“了”)
stop_words = set(["的", "了", "是", "我", "在", "有", "和", "就", "都", "而", "及", "与", "也"])

# (2)合并所有评论内容
all_comments = " ".join(integrated_df["评论内容"].tolist())

# (3)中文分词并过滤停用词
words = jieba.lcut(all_comments)
filtered_words = [word for word in words if len(word) > 1 and word not in stop_words]  # 保留长度>1的词

# (4)统计词频前20的关键词
word_counts = Counter(filtered_words)
top20_words = word_counts.most_common(20)
top_words_df = pd.DataFrame(top20_words, columns=["关键词", "词频"])

# (5)绘制关键词词频柱状图
plt.figure(figsize=(12, 6))
plt.bar(top_words_df["关键词"], top_words_df["词频"], color="#2ca02c")
plt.xlabel("关键词")
plt.ylabel("词频")
plt.title("评论关键词词频Top20")
plt.xticks(rotation=45, ha="right")
plt.grid(alpha=0.3, axis="y")
plt.savefig("comment_keywords.png", dpi=300, bbox_inches="tight")
plt.close()

print("评论关键词Top20:")
print(top_words_df)
# 结果解读:若“质量好”“物流快”词频高,说明用户对商品质量与物流满意度高;若“卡顿”“破损”词频高,需针对性优化
4.2.3 关联分析:不同月份评论与销量的关系

分析评论数量随时间的变化的与销量的关联,判断用户反馈对销量的潜在影响:

# 1. 按月份统计评论数量与平均销量
monthly_analysis = integrated_df.groupby("评论月份").agg(
    评论数量=("评论内容", "count"),
    平均销量=("销量", "mean")
).reset_index()

# 2. 转换评论月份为字符串(便于绘图)
monthly_analysis["评论月份"] = monthly_analysis["评论月份"].astype(str)

# 3. 绘制双轴图(评论数量与平均销量)
fig, ax1 = plt.subplots(figsize=(10, 6))

# 评论数量(左轴)
color1 = "#1f77b4"
ax1.set_xlabel("月份")
ax1.set_ylabel("评论数量", color=color1)
ax1.bar(monthly_analysis["评论月份"], monthly_analysis["评论数量"], color=color1, alpha=0.7)
ax1.tick_params(axis="y", labelcolor=color1)

# 平均销量(右轴)
ax2 = ax1.twinx()
color2 = "#ff7f0e"
ax2.set_ylabel("平均月销量(件)", color=color2)
ax2.plot(monthly_analysis["评论月份"], monthly_analysis["平均销量"], color=color2, marker="o", linewidth=2)
ax2.tick_params(axis="y", labelcolor=color2)

plt.title("月度评论数量与平均销量关联分析")
plt.grid(alpha=0.3)
fig.tight_layout()
plt.savefig("monthly_comment_sales.png", dpi=300, bbox_inches="tight")
plt.close()

# 计算评论数量与销量的相关系数
monthly_corr = monthly_analysis["评论数量"].corr(monthly_analysis["平均销量"])
print(f"月度评论数量与平均销量的相关系数:{monthly_corr:.4f}")
# 结果解读:若相关系数为正,说明评论数量增加时销量可能上升(用户反馈可能促进购买决策)

四、成果与应用:从数据到业务决策

通过上述数据整合与分析,可形成三大核心业务洞察,为电商运营提供具体指导:

  1. 商品优化方向:若评论关键词中 “续航短”“尺寸小” 高频出现,可推动产品研发团队优化相关功能;若平均评分低于 4 星,需排查质量或服务问题。
  2. 定价与促销策略:若价格与销量呈强负相关(如相关系数 =-0.8),可在大促期间适当降价以提升销量;若某品类商品评论 - 销量正相关性强,可通过 “用户晒单返现” 增加评论,间接拉动销量。
  3. 用户运营重点:按评论月份分析,若旺季(如 618、双 11)评论数量激增,需提前储备客服资源,及时响应用户反馈,避免负面评论扩散影响销量。

五、总结与展望

本文完整演示了 “爬虫爬取评论 + API 获取商品信息 + Pandas 分析” 的电商数据整合流程,核心价值在于实现了 “非结构化评论数据” 与 “结构化基础信息” 的联动分析,突破了单一数据维度的局限性。未来可进一步优化:

  • 技术层面:引入Scrapy框架实现分布式爬虫,提升大规模评论爬取效率;结合SnowNLP等工具实现评论情感分析(区分正面 / 负面评论),深化用户态度洞察。
  • 业务层面:整合用户画像数据(如年龄、地域),分析不同人群的评论偏好与购买行为,实现 “千人千面” 的精准运营。

数据整合与分析是电商进阶的核心能力,唯有持续挖掘数据价值,才能在激烈的市场竞争中实现精细化运营与可持续增长。

Logo

电商企业物流数字化转型必备!快递鸟 API 接口,72 小时快速完成物流系统集成。全流程实战1V1指导,营造开放的API技术生态圈。

更多推荐