新闻详情

新闻详情

首页 / 资讯中心 / 详情

基于Python的京东商品评论爬取与情感分析可视化实战

发布时间:2026/9/28 1:30:39来源:尧图网络
基于Python的京东商品评论爬取与情感分析可视化实战
简介这份资源面向Python爬虫与自然语言处理方向的初学者及课程设计者围绕京东商品评论的采集、清洗、情感分析与可视化展开可作为数据挖掘大作业或实战练手项目。压缩包共20个文件约5.87MB以py脚本、csv数据表、txt文本、jpg与png图表为主另含zbak备份与md说明文档覆盖爬虫代码、训练脚本、情感词典及结果数据等模块。已有76人学习下载。读者可获取从评论抓取、去重清洗到情感分类的完整流程代码并借助词云图、情感比例图等直观呈现分析结论同时参考README梳理项目结构与运行思路适合需要快速搭建同类分析框架或对照排错的学习者。1. 从一份京东评论数据包说起这套 Python 情感分析资源到底能跑出什么电商评论分析这件事真正卡住人的往往不是算法而是数据从哪来、怎么洗、洗完怎么判断正负、判断完怎么画图。这份「基于 Python 的京东商品评论爬取与情感分析可视化研究」资源包把这条链路完整地串了一遍jd_comment.py负责从京东商品页抓评论sentiment_analysis.py负责情感判断train.py负责模型训练jd_ciyun.jpg和fig.png是可视化产物online_shopping_10_cats.csv是训练语料positive.txt和negative.txt是情感词典。拿到手的人最关心的无非三件事这套代码能不能直接跑、跑出来准不准、换一个商品还能不能用。下面按「资源是什么 → 怎么用 → 坑在哪」的顺序拆开讲适合做课程设计、数据分析入门、NLP 练手的人照着复现。2. 拆开资源包文件分工与运行环境搭建2.1 每个文件在链路里干什么先把包里的东西按角色分清楚不然跑起来会不知道哪个先执行。核心文件大致分四类文件角色说明jd_comment.py采集入口抓取京东商品评论输出jd_comment.csvsentiment_analysis.py分析入口读取评论做情感分类输出result.csvtrain.py模型训练基于语料训练分类模型产出sentiment.marshal.3online_shopping_10_cats.csv训练语料十万级中文购物评论含正负标签positive.txt/negative.txt情感词典基于词典打分的备用方案jd_comment.csv原始数据爬取得到的评论原始表processed_comment_data.csv清洗后数据去重、去噪、分词后的中间结果result.csv最终结果每条评论的情感标签与得分fig.png/jd_ciyun.jpg可视化产物情感分布图与词云requirements.txt依赖清单环境安装用sentiment.marshal.3是 Python 序列化后的模型文件train.py训练完会生成它sentiment_analysis.py加载它做预测。所以执行顺序是先装依赖再决定是直接用词典还是先训练模型最后跑分析和可视化。2.2 环境搭建与依赖安装Python 版本建议 3.8 到 3.10太新的版本部分老库会编译失败。先建虚拟环境再按requirements.txt装依赖# 创建虚拟环境避免污染全局包 python -m venv venv # 激活环境Windows 用 venv\Scripts\activatemacOS/Linux 用下面这行 source venv/bin/activate # 安装依赖-i 指定国内镜像加速 pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simplerequirements.txt里通常包含requests、pandas、jieba、matplotlib、wordcloud、scikit-learn这几类。如果安装wordcloud报编译错误Windows 下直接下对应的.whl文件本地安装比硬编译省事。jieba首次分词会加载词典第一次跑会慢几秒属于正常现象。提示虚拟环境激活后命令行前面会出现(venv)前缀看到它才说明装到了正确的位置。2.3 先跑通再改最小验证路径不要一上来就改代码。先按原样跑一遍确认链路通# 第一步如果已有 jd_comment.csv可跳过爬取直接分析 python sentiment_analysis.py # 第二步查看输出 # result.csv 里应有情感标签列fig.png 应生成情感分布图如果sentiment_analysis.py依赖sentiment.marshal.3而包里没有就先跑train.py生成模型。训练语料online_shopping_10_cats.csv字段一般是cat、label、review三列label为 1 表示正面、0 表示负面。训练脚本会做分词、向量化、模型拟合、序列化四步跑完在目录下找sentiment.marshal.3。3. 爬取与清洗jd_comment.py 的参数与数据落地3.1 京东评论接口的请求结构京东商品评论走的是分页 JSON 接口核心参数是商品 ID 和页码。jd_comment.py里一般会构造这样的请求import requests import pandas as pd import time # 商品 ID 从商品详情页 URL 里取例如 item.jd.com/100012043978.html product_id 100012043978 page 0 comments [] while page 50: # 控制页数避免请求过多 url fhttps://club.jd.com/comment/productPageComments.action params { productId: product_id, score: 0, # 0 表示全部评价1 差评 2 中评 3 好评 sortType: 5, # 5 表示按时间排序 page: page, pageSize: 10, # 每页条数接口一般上限 10 } headers { User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64), Referer: fhttps://item.jd.com/{product_id}.html, } resp requests.get(url, paramsparams, headersheaders, timeout10) data resp.json() items data.get(comments, []) if not items: break for it in items: comments.append({ content: it.get(content, ), score: it.get(score, 0), time: it.get(creationTime, ), }) page 1 time.sleep(1) # 限速别把接口打爆 df pd.DataFrame(comments) df.to_csv(jd_comment.csv, indexFalse, encodingutf-8-sig)productId换成目标商品即可score用来按评价等级筛选pageSize别贪大接口有上限time.sleep(1)是血泪经验不加容易被限流返回空数据。encodingutf-8-sig是为了 Excel 打开不乱码。3.2 清洗环节要处理的四类脏数据爬下来的content字段不能直接喂给模型常见脏数据有四类HTML 标签残留、表情符号、重复评论、空内容。清洗逻辑import re import pandas as pd df pd.read_csv(jd_comment.csv) # 1. 去 HTML 标签 df[content] df[content].astype(str).apply(lambda x: re.sub(r.*?, , x)) # 2. 去表情与特殊符号只保留中文、英文、数字 df[content] df[content].apply(lambda x: re.sub(r[^\u4e00-\u9fa5a-zA-Z0-9], , x)) # 3. 去重 df df.drop_duplicates(subset[content]) # 4. 去空内容 df df[df[content].str.len() 2] df.to_csv(processed_comment_data.csv, indexFalse, encodingutf-8-sig)正则[^\u4e00-\u9fa5a-zA-Z0-9]保留中文、字母、数字其余全删。drop_duplicates按内容去重京东默认好评文案重复率很高不去重会严重拉偏情感分布。str.len() 2过滤掉「好」「嗯」这类无信息量的短评。3.3 分词与停用词处理中文情感分析绕不开分词。jieba是这套资源里最常用的方案import jieba import pandas as pd df pd.read_csv(processed_comment_data.csv) # 加载停用词没有现成文件就先用内置的简单列表 stopwords set([的, 了, 是, 在, 我, 有, 和, 就, 不, 人, 都]) def cut(text): words jieba.lcut(text) return .join([w for w in words if w not in stopwords and len(w) 1]) df[cut_content] df[content].apply(cut) df.to_csv(processed_comment_data.csv, indexFalse, encodingutf-8-sig)jieba.lcut返回列表用空格拼回字符串方便后续向量化。停用词表建议自己补一份电商领域的比如「京东」「物流」「快递」这类高频但无情感倾向的词留着会干扰词云和模型。4. 情感分析两条路线词典打分与模型训练怎么选4.1 词典方案positive.txt 与 negative.txt 的用法词典方案胜在快、可解释适合评论量不大或只想快速看趋势的场景。逻辑是分词后统计正面词和负面词出现次数做差得到情感得分。import jieba import pandas as pd # 加载情感词典 with open(positive.txt, encodingutf-8) as f: pos_words set([line.strip() for line in f if line.strip()]) with open(negative.txt, encodingutf-8) as f: neg_words set([line.strip() for line in f if line.strip()]) def score_sentiment(text): words jieba.lcut(str(text)) pos sum(1 for w in words if w in pos_words) neg sum(1 for w in words if w in neg_words) score pos - neg if score 0: return positive, score elif score 0: return negative, score else: return neutral, score df pd.read_csv(processed_comment_data.csv) df[[sentiment, score]] df[content].apply( lambda x: pd.Series(score_sentiment(x)) ) df.to_csv(result.csv, indexFalse, encodingutf-8-sig)pos - neg是最简单的极性判断。词典方案的短板很明显否定句「不推荐」和反讽「真是太好了呢」会判错因为它是逐词匹配不理解上下文。所以词典方案适合做粗筛不适合做精细结论。4.2 模型方案train.py 训练与 sentiment.marshal.3 加载要提升准确率就上模型。train.py的典型流程是读语料、分词、TF-IDF 向量化、朴素贝叶斯或 SVM 拟合、序列化保存。import pandas as pd import jieba import marshal from sklearn.feature_extraction.text import TfidfVectorizer from sklearn.naive_bayes import MultinomialNB from sklearn.model_selection import train_test_split from sklearn.metrics import accuracy_score # 读训练语料字段为 cat / label / review data pd.read_csv(online_shopping_10_cats.csv) data data.dropna(subset[review, label]) # 分词 data[cut] data[review].apply(lambda x: .join(jieba.lcut(str(x)))) # 向量化 vectorizer TfidfVectorizer(max_features5000) X vectorizer.fit_transform(data[cut]) y data[label] # 划分训练测试集 X_train, X_test, y_train, y_test train_test_split(X, y, test_size0.2, random_state42) # 训练朴素贝叶斯 model MultinomialNB() model.fit(X_train, y_train) # 评估 pred model.predict(X_test) print(准确率:, accuracy_score(y_test, pred)) # 序列化保存模型和向量器 with open(sentiment.marshal.3, wb) as f: marshal.dump((model, vectorizer), f)max_features5000控制特征维度太大容易过拟合、太慢test_size0.2留两成做验证random_state42保证每次划分一致方便复现。marshal是 Python 内置序列化比 pickle 快但只适合存 Python 对象跨版本兼容性差换 Python 版本可能加载失败。4.3 两条路线的取舍维度词典方案模型方案上手速度快改词典即可慢要训练和调参准确率一般否定句易错较高依赖语料质量可解释性强能看到命中词弱黑匣子适用场景快速看趋势要出结论、写报告常见做法是先用词典跑一版看分布再用模型跑一版对比两者差异大的样本单独拎出来看往往就是否定句和反讽句。5. 可视化与结果验证fig.png 和 jd_ciyun.jpg 怎么生成5.1 情感分布图fig.png一般是情感占比的柱状图或饼图用matplotlib画import pandas as pd import matplotlib.pyplot as plt df pd.read_csv(result.csv) counts df[sentiment].value_counts() # 解决中文显示乱码 plt.rcParams[font.sans-serif] [SimHei] plt.rcParams[axes.unicode_minus] False counts.plot(kindbar, color[#4CAF50, #F44336, #9E9E9E]) plt.title(京东商品评论情感分布) plt.xlabel(情感类别) plt.ylabel(评论数量) plt.tight_layout() plt.savefig(fig.png, dpi150)SimHei是 Windows 自带黑体macOS 换成Arial Unicode MSLinux 需手动装中文字体否则标题全是方块。dpi150保证导出清晰度写报告够用。5.2 词云生成jd_ciyun.jpg是词云用wordcloud库from wordcloud import WordCloud import pandas as pd import jieba df pd.read_csv(result.csv) # 只取正面评论做词云负面同理换 sentiment 值 text .join(df[df[sentiment] positive][content].astype(str)) words .join(jieba.lcut(text)) wc WordCloud( font_pathC:/Windows/Fonts/simhei.ttf, # 中文字体路径 width800, height600, background_colorwhite, max_words100, ) wc.generate(words) wc.to_file(jd_ciyun.jpg)font_path必须指向真实存在的中文字体文件路径写错会报OSError。max_words100控制词数太多会挤成一团。正面和负面各生成一张词云对比能直观看出用户夸什么、骂什么。5.3 结果验证的三个检查点跑完别急着下结论先做三个检查一是看result.csv里 neutral 占比如果超过一半说明词典覆盖不够或模型欠拟合二是随机抽 20 条人工核对标签准确率低于 70% 就得回头调三是看词云里有没有「京东」「物流」这类无情感词霸屏有就补进停用词重跑。6. 避坑与排查这套资源最容易翻车的五个地方6.1 爬取返回空数据现象jd_comment.csv只有表头没有内容。原因请求头缺失Referer或请求频率过高被限流。解决补上Referer指向商品页time.sleep调到 2 秒以上必要时换 IP 或降低页数。6.2 中文显示成方块现象fig.png标题和坐标轴全是方框。原因matplotlib默认字体不含中文。解决设置plt.rcParams[font.sans-serif]为系统已有中文字体Linux 下先fc-list :langzh查可用字体再填路径。6.3 模型加载报版本错误现象sentiment.marshal.3加载时报ValueError或EOFError。原因marshal跨 Python 版本不兼容训练和加载环境版本不一致。解决统一 Python 版本或改用pickle重新保存模型。6.4 情感分布严重偏正现象正面评论占比超过 90%。原因京东默认好评文案重复且都是正面未去重导致。解决drop_duplicates按内容去重并过滤掉「此用户未填写评价内容」这类系统默认文案。6.5 词云全是无意义词现象词云里「京东」「不错」「东西」占满。原因停用词表没覆盖电商高频词。解决把「京东」「物流」「快递」「东西」「不错」等补进停用词重新分词生成。7. 换一个商品还能不能跑参数化改造与复用技巧这套资源最大的价值不是跑通一次而是能换商品复用。把jd_comment.py里的product_id抽成命令行参数就能一个脚本跑多个商品import argparse parser argparse.ArgumentParser() parser.add_argument(--pid, requiredTrue, help京东商品 ID) parser.add_argument(--pages, typeint, default30, help爬取页数) args parser.parse_args() product_id args.pid max_pages args.pages # 后续请求逻辑用 product_id 和 max_pages 替换硬编码值跑的时候python jd_comment.py --pid 100012043978 --pages 50输出文件名带上商品 ID避免多次运行互相覆盖。我一般会把result.csv按商品 ID 重命名比如result_100012043978.csv方便横向对比不同商品的情感分布。验证复用是否成功看两个指标一是新商品的评论条数是否合理几十条说明被限流上千条说明正常二是情感分布是否符合直觉差评多的商品负面占比应该明显上升。如果换商品后准确率骤降多半是训练语料和商品品类不匹配比如用图书评论训练的模型去分析家电评论这时候要么补该品类的标注数据重训要么退回词典方案加领域词。从那以后我每次换商品跑这套流程都强制先跑 10 页小样本验证链路确认数据、清洗、分析、可视化四步都通再放开页数全量跑。这样即使中途翻车损失也就几分钟。希望帮到你。本文还有配套的精品资源点击获取
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

OFDM信道估计仿真指南:从导频设计到BER验证的完整链路 2026/9/28 3:04:01

OFDM信道估计仿真指南:从导频设计到BER验证的完整链路

简介:面向OFDM系统研究与通信课程设计的仿真项目,聚焦信道估计核心环节,适用于需要理解4G/5G物理层原理、导频设计与均衡实现的在校学生或通信工程师。项目采用Matlab编写,包内共4个m脚本,压缩包大小仅4KB,…

阅读更多 →
Python实战:NBA球员数据可视化与K-Means聚类分析 2026/9/28 3:04:01

Python实战:NBA球员数据可视化与K-Means聚类分析

简介:这是一份基于Python的NBA球员数据可视化分析项目,定位为毕业设计、期末大作业或课程设计的高分标杆,适合具有Python基础、希望参考真实数据分析全流程的学生和开发者。项目完整覆盖球员数据爬取、清洗、聚类分析与可视化展示&#xff0c…

阅读更多 →
js-framework-benchmark 中的 Spair-qr:基于 Rust + WebAssembly 的 queue-render 基准实现 2026/9/28 3:04:01

js-framework-benchmark 中的 Spair-qr:基于 Rust + WebAssembly 的 queue-render 基准实现

性能测试开发者工具 【免费下载链接】js-framework-benchmark A comparison of the performance of a few popular javascript frameworks 项目地址: https://gitcode.com/gh_mirrors/js/js-framework-benchmark 点击查看 免费下载 本文围绕 js-framework-benchmar…

阅读更多 →
从零实现同化棋C++小游戏:棋盘规则与AI搜索全解析 2026/9/28 3:03:55

从零实现同化棋C++小游戏:棋盘规则与AI搜索全解析

简介:面向 C 课程设计学习者,这份同化棋游戏项目以棋盘策略为核心,完整演示了从用户输入、棋盘状态维护到 AI 最优落子、自动存档恢复的闭环开发流程,适合作为面向对象编程与小型游戏开发的练习范本,项目代码结构清晰&…

阅读更多 →
微带线高低阻抗低通滤波器设计:从理论计算到ADS版图联合仿真 2026/9/28 3:03:55

微带线高低阻抗低通滤波器设计:从理论计算到ADS版图联合仿真

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
用C++实现同化棋:从命令行对战到AI自对弈的完整指南 2026/9/28 3:03:54

用C++实现同化棋:从命令行对战到AI自对弈的完整指南

简介:面向C课程设计的一款同化棋游戏项目,适合正在学习面向对象编程、算法设计或游戏开发的学生,可作为课程设计或期末实践参考。项目覆盖同化棋核心规则、用户输入校验、基于极大极小算法或Alpha-Beta剪枝的AI下法、棋盘二维数组表示与更新、…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉