新闻详情

新闻详情

首页 / 资讯中心 / 详情

从爬虫到AI情感分析:京东评论数据处理全流程解析

发布时间:2026/9/14 23:38:10来源:尧图网络
从爬虫到AI情感分析:京东评论数据处理全流程解析
简介这是一份基于爬虫与AI技术的京东商品评论自动化分析系统项目完整资料面向计算机相关专业学生、毕业设计或课程设计者可用于学习爬虫、自然语言处理与情感分析等综合技能。资源共20个文件包含7个Python脚本如爬虫抓取、文本清洗、情感分析、5个文本配置与说明、2个Excel评论数据文件、1份Word实验报告、多张可视化图表及说明文档压缩包仅377KB结构清晰便于快速上手。项目源码已获导师认可答辩评分95分代码经测试可靠运行覆盖数据采集、预处理、AI分析及结果可视化全流程并附带原始与清洗后的评论数据便于对照验证。已有46人学习下载适合从爬虫入门到完整项目实战的进阶参考也可在此基础上扩展功能或直接用于毕设课设。1. 京东评论区里的“水军”和“真实反馈”怎么用爬虫和AI拆开做电商选品或竞品分析时京东评论区是最容易被低估的数据源。用户会写“物流快”“质量差”“和图片不符”但更多评论是“还不错”“一般般”中性词里藏着真实购买体验。单纯靠人工看几千条评论不现实按关键词统计又分不清“品质不错”和“客服不错”的差别。这个项目的做法是用爬虫把评论批量拉下来清洗分词后用大模型API做情感打分再把结果可视化成词云和饼图。整套流程跑通后输入一个商品ID几分钟就能拿到带情感倾向的分析报告。适合正在做课程设计或想给团队搭一个简易舆情分析工具的人参考。项目里所有代码都是可独立运行的模块接下来就从采集端开始拆。2. spider.py里的Requests并发有限速京东评论接口的正确调法2.1 评论接口与普通网页爬虫的差异京东商品评论并不渲染在商品详情页的HTML里而是通过一个独立的异步接口返回。打开浏览器开发者工具在Network面板筛选productId相关的XHR请求能看到类似https://club.jd.com/comment/productPageComments.action的URL返回的是JSON。这个接口对外部爬虫并不友好关键点在于需要携带ProductId和Score等参数Score传0代表全部评论传1代表差评。分页参数是page和pageSize但pageSize超过上限会被截断项目里统一用0或其他值来规避默认截断。接口会校验Referer和Cookie尤其是翻页超过3次之后即使返回200内容也可能是空数组或重复数据。项目中的spider.py就是围绕这个接口设计的。它没有用Scrapy而是采用requests.Session配合ThreadPoolExecutor做并发采集这样能在不引入重型框架的情况下快速控制并发数量和请求频率。import requests from concurrent.futures import ThreadPoolExecutor, as_completed def fetch_comments(session, product_id, page): url https://club.jd.com/comment/productPageComments.action params { productId: product_id, score: 0, sortType: 5, page: page, pageSize: 10, isShadowSku: 0, fold: 1, } headers { Referer: fhttps://item.jd.com/{product_id}.html, User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36, } resp session.get(url, paramsparams, headersheaders, timeout10) resp.raise_for_status() data resp.json() return data.get(comments, []) def parallel_fetch(product_id, max_pages5, workers4): session requests.Session() with ThreadPoolExecutor(max_workersworkers) as executor: futures {executor.submit(fetch_comments, session, product_id, page): page for page in range(max_pages)} all_comments [] for future in as_completed(futures): comments future.result() if comments: all_comments.extend(comments) return all_comments这里sortType5表示按时间排序也可以改成6按好评度排序。pageSize虽然写了10但接口实际返回的数量可能更多这属于京东接口的默认行为不建议硬改。ThreadPoolExecutor的workers参数控制并发线程数项目里给的是4实际生产环境如果账号权重高可以调到8但再高就会触发滑块验证。2.2 解析评论JSON时容易踩的坑接口返回的comments数组里每个元素包含content、creationTime、score、nickname、productColor等字段。这里要注意两点一是评论内容可能包含图片标记比如[图片]清洗时要单独处理二是referenceTime字段表示购买时间很多分析只关注评论时间而忽略购买时间这会导致“囤货后使用”的评论被误判为即时评价。项目中抓到的数据最终写入了original_data.xlsx而不是直接存数据库是为了方便后续在Excel里人工核对。写入用pandas.ExcelWriter字段只保留分析必需的几个字段名含义清洗后用途content评论文本分词、情感分析score用户星级1-5与AI情感分对比creationTime评论时间趋势分析productColor规格型号分组统计referenceTime购买时间区分即评和用后评如果只是简单跑通流程建议先只抓前5页把这一段代码单测通过后再放大。另外session.get后要检查data[comments]是否为None京东偶尔会返回{comments: null}这时候需要休眠重试。项目里的做法是一个简单的while retry 3循环重试前time.sleep(2)。2.3 数据落盘的边界处理抓回来的评论是字典列表直接pd.DataFrame后ExcelWriter会自动处理中文列名但遇到emoji字符时openpyxl会报错。所以项目在写Excel之前强制做一次格式转换import pandas as pd def save_to_excel(comments, output_path): rows [] for item in comments: c item.get(content) or c c.replace([图片], ).replace(!--, ).strip() rows.append({ content: c, score: item.get(score), creationTime: item.get(creationTime), productColor: item.get(productColor, ), referenceTime: item.get(referenceTime), }) df pd.DataFrame(rows) df df.drop_duplicates(subset[content], keepfirst) df.to_excel(output_path, indexFalse, engineopenpyxl)drop_duplicates这一步很关键因为翻页时评论区会重复推荐热门评论如果不先去重后续统计词频和情感占比都会失真。indexFalse避免把行号写进去。3. clean.py与segmented.py中文评论清洗和分词的先后顺序3.1 清洗粒度不是去个空格那么简单原始评论里混合了HTML实体、中文标点、英文单词、数字和表情符号。clean.py这个脚本要处理的问题比想象中多。第一个典型场景是“赞物流超快”这种评论在词云里会变成乱码必须用正则把非中英文和常见标点过滤掉。第二个场景是“11111”这种纯数字评论对情感分析毫无意义如果字长小于2且全是数字可以直接丢弃。清洗逻辑分为四步顺序不能乱import re def clean_comment(text): # 1. 去除HTML标签 text re.sub(r[^], , text) # 2. 去除图片占位符 text re.sub(r\[图片\], , text) # 3. 统一全角半角 text text.replace( , ).replace(, ,).replace(。, .) # 4. 只保留中文、英文、数字和基础标点 text re.sub(r[^\u4e00-\u9fa5a-zA-Z0-9,.!? ], , text) return text.strip()第二步和第三步看起来简单但直接决定了分词质量。保留英文和数字是为了处理“iPhone15发货快”这样的评论如果粗暴过滤掉字母分词结果会变成“iphone”“发货”“快”丢失品牌信息。第四步的正则里\u4e00-\u9fa5匹配中文a-zA-Z0-9匹配字母数字逗号句号和感叹号问号是保留给后续情感分析的。3.2 停用词表不该抄网上的要自己扩充项目自带了一个stopwords.txt里面除了“的、了、和、是”这种常规虚词还专门加了“京东、物流、快递、卖家、客服”这类行业词。很多人不理解为什么把“物流”也去掉因为这里的分析目标是商品本身的评价高频出现“物流”并不能说明商品质量反而会干扰词云展示。segmented.py里使用jieba.lcut进行精确模式分词然后逐词过滤import jieba def load_stopwords(pathstopwords.txt): with open(path, r, encodingutf-8) as f: return {line.strip() for line in f if line.strip()} def segment(clean_text, stopwords): words jieba.lcut(clean_text) result [] for w in words: w w.strip() if not w: continue if w.lower() in stopwords: continue if len(w) 2: continue result.append(w) return result这里有个容易被忽略的细节len(w) 2会过滤掉“好”“差”“快”这类单字词但中文评价中单字词往往情感强烈。项目这样设计是因为后续AI情感分析会把整句送入模型单字词的丢失不影响句级判断但如果做词频统计就会损失粒度。所以实际应用时要看你的输出目标如果追求词云丰富度这行可以直接删除。3.3 分词结果如何写回文件segmented_words.txt是逐行存储的每一行对应一条评论的分词结果词与词之间用空格分开。这样做是为了方便nlp.py读取后按行统计而不是把所有词堆在一起再切分。with open(segmented_words.txt, w, encodingutf-8) as f: for words in segmented_list: f.write( .join(words) \n)我一般会额外统计分词长度分布如果单条评论分词后超过50个词多半是清洗阶段没去干净比如把“客服回复很及时态度好专业耐心”合在了一起这是正常的不需要特殊处理。4. qianwen.py调用AI大模型做情感分析nlp.py怎么组织流程4.1 为什么不用SnowNLP而要大模型接口通用情绪库对电商评论的准确率并不高原因在于电商评论语境有大量反讽和比较。比如“跟图片一样好看就是缩水”这句话前半句正向后半句负向传统情感字典会算成中性。项目里qianwen.py封装了对通义千问API的调用把一整条评论输入给模型让它输出正向/负向/中性及置信度。这里选择大模型接口而不是本地模型主要是为了降低环境配置成本。项目中requirements.txt里没有transformers只有requests、jieba、pandas等库说明作者刻意避免了本地模型依赖。如果你的服务器有GPU也可以换成vLLM本地部署但调用模块接口不变。import requests import json def analyze_sentiment(text, api_key): url https://dashscope.aliyuncs.com/api/v1/services/aigc/text-generation/generation headers { Authorization: fBearer {api_key}, Content-Type: application/json, } payload { model: qwen-turbo, input: { messages: [ {role: system, content: 你是一个商品评论情感分析助手。只输出JSON{\sentiment\:\positive/negative/neutral\,\confidence\:0.0}}, {role: user, content: text} ] } } resp requests.post(url, headersheaders, jsonpayload, timeout15) result resp.json() output_text result[output][text] return json.loads(output_text)注意payload里的model参数qwen-turbo和qwen-plus的定价和效果有差异。项目里用qwen-turbo就足够了因为评论分析任务不涉及复杂推理。如果批量处理建议每次请求间增加0.2到0.5秒的延时否则接口会返回限流错误码。4.2 nlp.py如何串联分词和情感分析nlp.py是整个项目的调度模块。它先读取cleaned_data.xlsx中的评论内容然后分批调用analyze_sentiment最后把结果合并回DataFrame并计算出各类占比。这里有一个性能优化点评论长度小于10的短句可以直接跳过模型调用按默认中性处理减少API消耗。import pandas as pd from qianwen import analyze_sentiment def batch_analyze(excel_path, api_key, batch_size50): df pd.read_excel(excel_path, engineopenpyxl) sentiments [] confidences [] for idx, row in df.iterrows(): content str(row[content]) if len(content) 10: sentiments.append(neutral) confidences.append(0.5) continue try: result analyze_sentiment(content, api_key) sentiments.append(result[sentiment]) confidences.append(result[confidence]) except Exception: sentiments.append(neutral) confidences.append(0.0) df[sentiment] sentiments df[confidence] confidences df.to_excel(output/sentiment_result.xlsx, indexFalse, engineopenpyxl) return df异常处理部分不能忽略。作为个人高分项目不能因为某一条评论API超时导致整个程序崩溃。项目里异常时补一个中性结果并把confidence置为0这样后续画饼图时这一条会被归入“未判断”区域也算是一种处理逻辑。4.3 可视化文件是怎么生成的wordcloud.png和sentiment_analysis_pie_chart.png分别由词云脚本和饼图脚本生成。词云使用WordCloud库时要指定中文字体路径否则图片里的中文全部变成方框。这是一个最常见的问题代码里需要显式传入font_path参数from wordcloud import WordCloud import matplotlib.pyplot as plt font_path C:/Windows/Fonts/simhei.ttf wc WordCloud( font_pathfont_path, width800, height600, max_words200, background_colorwhite, stopwordsset() ).generate( .join(all_words)) wc.to_file(wordcloud.png)饼图使用matplotlib绘制把正向、负向、中性的数量除以总数画成扇形图。这里有一个细节如果负向评论占比小于5%饼图上的文字标签会叠在一起项目里通过autopct%1.1f%%控制小数位并且用startangle90让第一个扇区从正上方开始。参数作用调优建议max_words词云显示的最大词数200足够超过后低频词堆叠background_color词云背景白色适合打印报告batch_size每批分析的评论数50是性能和稳定性的平衡点confidence可信度阈值低于0.6可归为中性避免误判5. 把项目改造成其他电商评论分析器的三个关键技巧5.1 接口适配层不要让爬虫代码绑定京东京东的评论接口参数里有productId和score拼多多和淘宝的接口完全不一样。改成通用系统时建议把spider.py里的请求函数抽象成一个Fetcher类不同平台继承实现相同的方法签名。项目里的main.py已经做了类似解耦但只针对京东。你可以在main.py里加一个platform参数内部动态选择爬虫类。class CommentFetcher: def fetch(self, product_id): raise NotImplementedError class JDCommentFetcher(CommentFetcher): def fetch(self, product_id): # 这里放京东逻辑 return comments class TmallCommentFetcher(CommentFetcher): def fetch(self, product_id): # 这里放天猫逻辑 return comments这样扩展后analyze_product函数只需要拿到CommentFetcher实例剩下的清洗和AI分析流程完全复用。我一般会把商品URL和平台名称写进main函数的参数解析里方便批量跑数据。5.2 限流与并发参数的自适应调节京东对评论接口的限流不是固定的高峰期抓5页就触发验证深夜可以连续抓50页。项目里的workers4是保守值。建议把并发数和重试次数做成配置项在requirements.txt同级目录放一个config.ini。[spider] workers 4 max_pages 5 retry 3 timeout 10运行前先抓一页测试接口响应时间如果单次耗时超过3秒就降低workers到2反之可以调到6。同时记录每次请求的HTTP状态码当出现403时切换Cookie并等待10秒而不是立即重试。这是从被反爬限制里积累的经验。5.3 验证情感分析准确率的简单方法AI情感分析模型对长文本准确率不错但短评“就是好”这种反而容易误判。项目自带的nlp.py只做了结果输出没有校验环节。你可以结合评论自带的score星级做一个交叉验证星级4到5分对应正向1到2分对应负向3分中性。把模型的情感结果和这个规则结果对比就能算出准确率。def validate(df): rule_based_sentiment [] for score in df[score]: if score 4: rule_based_sentiment.append(positive) elif score 2: rule_based_sentiment.append(negative) else: rule_based_sentiment.append(neutral) correct sum(1 for a, b in zip(rule_based_sentiment, df[sentiment]) if a b) return correct / len(df)这个验证脚本不需要额外装库可以直接放在main.py末尾。如果准确率低于70%说明你的评论数据和模型提示词不匹配需要调整qianwen.py里的system提示词比如加上“注意电商评论中的反讽表达”。最后生成report.docx时可以把这份准确率数值写进结论段落比单纯贴词云更有说服力。本文还有配套的精品资源点击获取
网站建设高端定制企业官网
RELATED

相关资讯

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

较早相关资讯

最新相关资讯

sherpa-onnx 中 WeSpeaker 说话人嵌入模型 ONNX 元数据注入指南:从 pretrained 模型到可直接推理的完整流程 2026/9/15 1:08:17

sherpa-onnx 中 WeSpeaker 说话人嵌入模型 ONNX 元数据注入指南:从 pretrained 模型到可直接推理的完整流程

sherpa-onnx 中 WeSpeaker 说话人嵌入模型 ONNX 元数据注入指南:从 pretrained 模型到可直接推理的完整流程 【免费下载链接】sherpa-onnx Speech-to-text, text-to-speech, speaker diarization, speech enhancement, source separation, and VAD using next-gen K…

阅读更多 →
军工视频安全传输:SpringCloud微服务加密架构实践 2026/9/15 1:08:17

军工视频安全传输:SpringCloud微服务加密架构实践

1. 项目背景与核心挑战在国防军工领域,视频文件的传输安全直接关系到国家机密保护。传统HTTP协议传输存在三大安全隐患:数据明文传输易被截获、分片重组可能被篡改、缺乏端到端身份验证机制。SpringCloud作为分布式微服务架构,需要在这些限制…

阅读更多 →
Navicat密码管理机制与恢复实战指南 2026/9/15 1:08:17

Navicat密码管理机制与恢复实战指南

1. Navicat密码管理机制解析Navicat作为数据库管理工具中的佼佼者,其密码存储机制经历了多次迭代。从Navicat 12版本开始,采用了基于AES-256-CBC的加密方案,相比早期版本的简单编码方式,安全性有了质的提升。加密后的密码会存储在…

阅读更多 →
Telegraf 集成 systemd 凭据存储(systemd-creds)实现安全的明文凭据注入 2026/9/15 1:08:17

Telegraf 集成 systemd 凭据存储(systemd-creds)实现安全的明文凭据注入

Telegraf 集成 systemd 凭据存储(systemd-creds)实现安全的明文凭据注入 【免费下载链接】telegraf Agent for collecting, processing, aggregating, and writing metrics, logs, and other arbitrary data. 项目地址: https://gitcode.com/GitHub_Tr…

阅读更多 →
记住我功能的安全隐患与防御实践 2026/9/15 1:08:17

记住我功能的安全隐患与防御实践

1. "记住我"功能的安全隐患剖析"记住我"这个看似贴心的功能按钮,几乎出现在所有需要登录的网站和应用中。作为用户,我们早已习惯在咖啡馆的公共电脑上勾选它,在手机浏览器里依赖它,甚至在企业内网系统中信任它…

阅读更多 →
论文排版终极攻略|90%毕业生都在踩的格式坑!okbiye一键搞定零翻车 2026/9/15 1:05:17

论文排版终极攻略|90%毕业生都在踩的格式坑!okbiye一键搞定零翻车

很多同学论文内容写得完美,查重、降重全部达标,最后却栽在格式排版上。 导师终审、学校盲审、系统定稿上传,格式细微错乱直接打回重改,熬夜调好的文档,换台电脑、上传系统就全盘崩盘。其实论文排版根本不用逐行手动微…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

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

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