在电商商品数据的采集与分析过程中,关键在于实现合规获取、精确抓取、高质量预处理以及具有针对性的数据挖掘。整个流程需结合电商平台的技术规范、可用工具和实际业务需求进行系统化落地。以下是一套完整且具备实操性的技术方案,兼顾了合规性、技术可行性与数据分析价值,适用于开发人员或需要深度定制化数据采集的场景。
在开始采集前,必须清晰界定核心目标,避免无效或冗余数据的收集:
典型应用场景包括:
常见数据字段分类如下:
| 数据类型 | 具体字段 |
|---|---|
| 商品基础信息 | 商品 ID、标题、SKU、类目、品牌、规格(颜色/尺寸)、主图/详情页图片链接、产地 |
| 价格信息 | 原价、现价、促销价、优惠券信息、满减规则、价格生效时间段 |
| 销售相关数据 | 销量、评价数量、收藏量、好评率、发货地、配送时效 |
| 用户评价内容 | 评价文本、评分星级、追加评论、晒图链接、评价时间、用户标签(例如“回头客”) |
| 运营表现指标 | 搜索结果中的位置、是否带有广告标识、关联推荐商品列表 |
各大电商平台对数据抓取行为有严格限制,违规操作可能导致账号封禁甚至法律纠纷(依据《电子商务法》《网络安全法》《反不正当竞争法》等相关法规)。
必须核查的内容包括:
robots.txt,确认禁止爬虫抓取的路径(如用户中心、订单页面等敏感区域)https://www.xxx.com/robots.txt;应遵循的基本合规原则:非商业用途优先、不得干扰平台正常服务运行、不得泄露所采集的数据内容。
主流电商平台普遍提供官方 API 接口,适合需要稳定、高频、大规模数据接入的场景,尤其适用于系统集成或长期监控项目,是技术人员的最优选择。
| 平台 | 开发者平台入口 | 可采集核心数据 | 接入前提条件 |
|---|---|---|---|
| 京东 | ![]() |
商品详情、价格、库存、订单、用户评价、促销活动 | 需企业资质注册,创建应用并获取 AppKey/AppSecret |
| 淘宝 / 天猫 | ![]() |
商品信息、价格、销量、评价、店铺资料 | 需企业或个体工商户资质,申请相应 API 权限(部分接口收费) |
| 亚马逊 | ![]() |
商品数据、订单记录、库存状态、销售统计 | 拥有卖家账户,注册开发者身份,获得 Access Key |
| 拼多多 | ![]() |
商品信息、价格、促销政策、用户反馈 | 需企业提供资质,提交应用权限申请 |
https://api.jd.com/routerjson);python 运行import requests import hashlib import time # 京东API示例:获取商品详情 APP_KEY = "你的AppKey" APP_SECRET = "你的AppSecret" 商品ID = "100012345678" def get_jd_product_detail(): params = { "app_key": APP_KEY, "method": "jd.union.open.goods.detail.query", # 接口方法名 "format": "json", "v": "1.0", "timestamp": time.strftime("%Y-%m-%d %H:%M:%S"), "param_json": '{"skuIds":["' + 商品ID + '"]}' # 商品ID参数 } # 生成签名(按平台要求的加密方式) sign_str = APP_SECRET + "".join([f"{k}{v}" for k, v in sorted(params.items())]) + APP_SECRET params["sign"] = hashlib.md5(sign_str.encode()).hexdigest().upper() # 发送请求(处理限流:添加延时,重试机制) try: response = requests.get("https://api.jd.com/routerjson", params=params, timeout=10) if response.status_code == 200: return response.json() # 解析商品数据 except Exception as e: print(f"请求失败:{e}") time.sleep(2) # 重试前延时 return get_jd_product_detail() # 调用接口并提取数据 product_data = get_jd_product_detail() print("商品标题:", product_data["result"]["data"][0]["skuName"]) print("现价:", product_data["result"]["data"][0]["priceInfo"]["actualPrice"])
优势:合法合规、数据准确可靠(来自官方源)、支持高并发请求(在配额范围内);
注意事项:需密切关注接口限流策略(如京东单账号每秒最多允许 5 次调用)、签名有效期管理、参数格式正确性(避免因格式错误导致请求失败),部分高级功能接口可能需要付费或特殊审批。
当目标平台未提供开放接口,或现有 API 无法满足特定需求(如获取竞品搜索排名、详细评价内容)时,可采用爬虫技术进行补充采集。但必须严格遵守反爬机制,杜绝暴力抓取。
python 运行import requests from parsel import Selector import time import random # 代理IP池(需替换为有效代理) PROXIES = [ "http://123.45.67.89:8080", "http://98.76.54.32:8080" ] # User-Agent池 USER_AGENTS = [ "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36", "Mozilla/5.0 (iPhone; CPU iPhone OS 16_0 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/16.0 Mobile/15E148 Safari/604.1" ] def get_product_comments(sku_id, page=1): url = f"https://club.jd.com/comment/productPageComments.action?productId={sku_id}&score=0&sortType=5&page={page}&pageSize=10" headers = { "User-Agent": random.choice(USER_AGENTS), "Referer": f"https://item.jd.com/{sku_id}.html", # 模拟从商品页跳转 "Accept-Language": "zh-CN,zh;q=0.9" } proxies = {"http": random.choice(PROXIES), "https": random.choice(PROXIES)} try: response = requests.get(url, headers=headers, proxies=proxies, timeout=10) if response.status_code == 200: data = response.json() comments = data["comments"] # 提取评价数据 for comment in comments: yield { "user_id": comment["id"], "content": comment["content"], "score": comment["score"], "create_time": comment["creationTime"], "product_size": comment["productSize"] } time.sleep(random.uniform(1, 3)) # 随机延时 except Exception as e: print(f"采集失败:{e}") time.sleep(5) # 失败后延时重试 # 采集商品ID为100012345678的前5页评价 for page in range(1, 6): comments = get_product_comments("100012345678", page) for comment in comments: print(comment)
robots.txt 中列出的禁止访问页面,如 /order/ 和 /user/;避免采集涉及个人隐私的敏感信息(如手机号、身份证号码),所有用户评价内容应进行匿名化处理;
当目标平台出现验证码拦截时,建议接入打码服务平台(例如云打码、超级鹰)实现自动识别,或通过降低请求频率以模拟正常用户行为。
无需编写代码,适合快速获取少量数据或用于原型阶段的可行性验证。常用工具包括:
优势:操作简便、零编码门槛、支持多种数据导出格式;
劣势:自定义能力有限、大规模采集需付费、容易被目标平台识别并封禁 IP。
原始采集数据通常存在缺失值、重复记录、格式不统一等问题,必须经过标准化处理才能用于分析。主要流程如下:
商品ID+评价ID
或
URL
作为唯一标识字段进行判断;
YYYY-MM-DD HH:MM:SS
(如将“5月前”转化为“2024-05-20”);re
模块进行清洗,结合
jieba
进行中文分词预处理;示例代码(Python + Pandas):
python 运行import pandas as pd import re # 读取采集的原始数据(CSV格式) df = pd.read_csv("product_comments.csv") # 1. 去重(按user_id+content去重) df = df.drop_duplicates(subset=["user_id", "content"], keep="first") # 2. 处理缺失值(删除score为空的记录) df = df.dropna(subset=["score"]) # 3. 格式标准化(评价内容清洗:去除特殊字符和HTML标签) def clean_content(content): content = re.sub(r"<.*?>", "", str(content)) # 去除HTML标签 content = re.sub(r"[^\u4e00-\u9fa5a-zA-Z0-9\s]", "", content) # 保留中文、英文、数字 return content.strip() df["clean_content"] = df["content"].apply(clean_content) # 4. 异常值剔除(删除score不在1-5之间的记录) df = df[(df["score"] >= 1) & (df["score"] <= 5)] # 保存清洗后的数据 df.to_csv("cleaned_comments.csv", index=False)
根据不同的业务目标选择合适的分析方法,以下是常见场景的具体实施方案:
分析维度:价格走势(按日/小时统计)、促销活动效果(对比促销前后价格与销量变化)、价格带分布(识别竞品集中定价区间);
常用工具:Python 配合 Matplotlib/Seaborn 绘图库,或使用 Tableau 构建可视化仪表盘;
示例:生成竞品价格趋势图
python 运行import pandas as pd import matplotlib.pyplot as plt # 读取价格数据(含商品ID、日期、价格) price_df = pd.read_csv("product_price.csv") price_df["date"] = pd.to_datetime(price_df["date"]) # 按商品分组绘制价格趋势 plt.rcParams["font.sans-serif"] = ["SimHei"] # 解决中文显示问题 plt.figure(figsize=(12, 6)) for sku_id, group in price_df.groupby("sku_id"): plt.plot(group["date"], group["price"], label=f"商品{sku_id}") plt.xlabel("日期") plt.ylabel("价格(元)") plt.title("竞品价格趋势监控") plt.legend() plt.grid(True, alpha=0.3) plt.savefig("price_trend.png", dpi=300, bbox_inches="tight")
分析维度:情感倾向分析(计算好评、中评、差评占比)、关键词提取(发现用户关注的主要卖点或问题)、高频问题统计(如“物流慢”“质量差”等);
常用工具:Python + jieba(中文分词)+ SnowNLP(情感分析)+ WordCloud(生成词云图);
示例:执行评价情感分析与关键词抽取
python 运行from snownlp import SnowNLP import jieba from wordcloud import WordCloud import matplotlib.pyplot as plt # 读取清洗后的评价数据 comment_df = pd.read_csv("cleaned_comments.csv") # 1. 情感分析(计算情感得分:0-1,越接近1越正面) def get_sentiment_score(content): return SnowNLP(content).sentiments comment_df["sentiment"] = comment_df["clean_content"].apply(get_sentiment_score) comment_df["sentiment_label"] = comment_df["sentiment"].apply(lambda x: "好评" if x >= 0.6 else "差评" if x <= 0.4 else "中评") # 2. 统计情感分布 sentiment_count = comment_df["sentiment_label"].value_counts() print("情感分布:", sentiment_count) # 3. 关键词提取(合并所有评价内容,分词后统计词频) all_content = " ".join(comment_df["clean_content"]) words = jieba.lcut(all_content) # 过滤停用词(如“的”“了”“是”) stop_words = set(pd.read_csv("stop_words.txt", header=None)[0].tolist()) filtered_words = [word for word in words if len(word) > 1 and word not in stop_words] # 4. 生成词云图 wordcloud = WordCloud( font_path="simhei.ttf", # 中文字体路径 width=800, height=400, background_color="white", max_words=200 ).generate(" ".join(filtered_words)) plt.figure(figsize=(10, 6)) plt.imshow(wordcloud, interpolation="bilinear") plt.axis("off") plt.title("商品评价关键词词云") plt.savefig("comment_wordcloud.png", dpi=300, bbox_inches="tight")
分析维度:各品类销量排名、热销商品特征(价格段、品牌、规格)、搜索排名与实际销量之间的关联性;
常用工具:Python + Pandas(进行统计建模)、Tableau(构建可视化看板)、Power BI(支持交互式探索分析)。
成功采集电商商品数据的核心原则是 “合规 + 精准 + 高效”:
扫码加好友,拉您进群



收藏
