资讯动态

实战解析:Python爬虫高效抓取京东商品评论数据

发布时间:2026/8/3 22:17:23 来源:尧图企业网站定制
1. 京东评论爬虫的价值与应用场景做电商运营的朋友应该都深有体会用户评论就是一座金矿。去年我帮一个美妆品牌做市场分析时发现他们每月要花2万多人工费专门整理竞品评论。其实用Python爬虫这些工作半小时就能搞定。京东评论数据最直接的价值体现在三个方面首先是产品改进比如某款口红出现拔干的差评集中出现在北方地区可能就是配方需要调整其次是竞品分析通过对比同类商品的好评率、关键词频率能发现市场空白点最后是用户画像从评论时间、地域分布可以判断主力消费人群的作息习惯。实际操作中会遇到几个典型问题一是京东默认只展示前100页每页10条所以单次最多只能获取1000条数据二是反爬机制越来越严连续请求容易被封IP三是评论数据包含大量非结构化内容需要清洗后才能分析。下面我就用实战代码带大家逐个击破这些难点。2. 逆向分析京东评论接口第一次抓京东评论时我傻乎乎地用Selenium模拟点击下一页按钮结果不仅速度慢还经常被验证码拦截。后来发现直接调用后台API才是王道这里分享三个关键技巧找到真实接口的技巧在商品页按F12打开开发者工具切换到Network网络选项卡然后点击评论区的下一页这时会看到类似pc_club_productPageComments的请求这就是我们要的API。接口URL通常包含这些核心参数url https://api.m.jd.com/?functionIdpc_club_productPageCommentsproductId100046685764page{0}pageSize10.format(page)其中productId是商品编号page控制页码pageSize决定每页条数最大可设30。测试接口时我踩过一个坑直接用浏览器复制的URL可能包含临时token如t1709984938800这种token几分钟就会失效。其实只要保留基础参数就能正常工作我的经验是参数越少越稳定。3. 构建稳健的爬虫框架先上完整代码框架关键点我会逐行解释import requests import json import time from fake_useragent import UserAgent ua UserAgent() headers { User-Agent: ua.random, Referer: https://item.jd.com/ } def get_comments(product_id, max_pages100): comments [] for page in range(0, max_pages): try: url fhttps://api.m.jd.com/?functionIdpc_club_productPageCommentsproductId{product_id}page{page}pageSize10 response requests.get(url, headersheaders) data json.loads(response.text) if not data.get(comments): print(f第{page}页无数据终止爬取) break comments.extend(parse_comments(data)) time.sleep(random.uniform(1.5, 3)) # 随机延时 except Exception as e: print(f第{page}页出错{str(e)}) continue return comments反爬对策方面有这些实战经验User-Agent要随机生成我推荐用fake_useragent库比硬编码更可靠请求间隔建议设置在1.5-3秒之间太短容易被封太长效率低一定要加Referer头伪装成从商品页跳转过来用try-except包裹请求代码遇到异常自动重试下一页去年双十一期间某品牌让我紧急抓取竞品的促销反馈就是因为加了这些防护措施连续爬了8小时都没被封。不过要注意工作日白天请求频率要调低京东的反爬在流量高峰时段会更敏感。4. 数据解析与存储方案原始数据是JSON格式包含很多无用字段。这是我优化后的解析函数def parse_comments(data): result [] for comment in data[comments]: item { user: comment.get(nickname, 匿名用户), score: comment.get(score, 5), content: comment.get(content, ).replace(\n, ), time: comment.get(creationTime, ), useful: comment.get(usefulVoteCount, 0), color: comment.get(productColor, ), images: len(comment.get(images, [])) } # 清洗特殊字符 item[content] .join(char for char in item[content] if ord(char) 256) result.append(item) return result存储方案要根据数据量选择小规模数据1万条用Excel最方便中等规模建议用SQLite或MySQL大数据量考虑MongoDB这里给出Excel存储的优化版代码import pandas as pd def save_to_excel(comments, filename): df pd.DataFrame(comments) # 按评论时间排序 df[time] pd.to_datetime(df[time]) df df.sort_values(time, ascendingFalse) writer pd.ExcelWriter(filename, enginexlsxwriter) df.to_excel(writer, indexFalse, sheet_name评论数据) # 自动调整列宽 workbook writer.book worksheet writer.sheets[评论数据] for idx, col in enumerate(df.columns): max_len max(df[col].astype(str).map(len).max(), len(col)) 2 worksheet.set_column(idx, idx, max_len) writer.close()实际项目中我还会额外存储原始JSON作为备份。有个容易忽略的细节京东评论里的时间格式不统一有的带毫秒有的不带最好用pd.to_datetime统一处理。5. 高级技巧与异常处理突破1000条限制的方法通过组合不同排序方式按时间/按有用性和筛选条件好评/中评/差评理论上能获取更多数据。比如sort_types [5, 6] # 5按推荐排序6按时间排序 scores [0, 1, 2, 3] # 0全部1差评2中评3好评 for sort_type in sort_types: for score in scores: url fhttps://api.m.jd.com/...sortType{sort_type}score{score}... # 爬取代码...IP被封的应急方案立即停止程序更换IP建议使用ADSL拨号VPS检查请求头是否完整特别是Cookie和Referer将延时增加到5秒以上持续1小时后再试曾有个客户在凌晨3点突然打电话说爬虫返回403错误。排查发现是他们内网IP被京东拉黑了最后通过切换手机热点临时解决了问题。所以关键业务一定要准备备用IP池。6. 数据分析实战案例用这份代码抓取了某品牌智能手环的5000条评论后我们用jieba分词词云做了简单分析from wordcloud import WordCloud import jieba import matplotlib.pyplot as plt # 合并所有评论 text .join([c[content] for c in comments]) # 分词处理 words jieba.lcut(text) filtered_words [w for w in words if len(w) 1 and w not in [京东, 物流]] # 生成词云 wc WordCloud(font_pathmsyh.ttc, width800, height600) wc.generate( .join(filtered_words)) plt.imshow(wc) plt.axis(off) plt.show()分析发现心率监测不准的投诉在3月份突然增多后来证实是该批次硬件有问题。品牌方根据这个线索主动召回产品反而提升了客户满意度。这就是数据挖掘的价值——发现人眼难以察觉的规律。7. 法律合规与道德边界虽然技术无罪但爬虫使用要特别注意法律风险。我的原则是绝不绕过robots.txt的限制请求频率控制在人类浏览的正常范围数据仅用于分析不进行二次传播商业项目务必获得法律意见去年某跨境电商就因爬取竞品价格数据被告最终赔偿200多万。建议大家在爬取前仔细阅读京东的用户协议必要时可以联系他们开放官方API接口。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价