当前位置: 首页 > news >正文

Python爬虫实战:手把手教你用Requests库搞定京东商品评论数据(附完整源码与翻页避坑指南)

Python爬虫实战:京东商品评论数据采集全流程解析

每次看到电商平台海量的商品评论,你是否好奇这些数据背后隐藏着怎样的消费趋势?作为数据分析师或市场研究人员,获取真实的用户反馈是了解产品表现的关键。本文将带你用Python的Requests库,从零开始构建一个可靠的京东商品评论采集工具。

1. 环境准备与基础配置

在开始编写爬虫之前,我们需要确保开发环境配置正确。以下是必要的准备工作:

  • Python 3.6+环境:推荐使用Anaconda管理Python环境
  • 核心库安装
    pip install requests xlwt xlutils pandas
  • 开发工具选择:VS Code或PyCharm等支持Python调试的IDE

京东的评论数据通过API接口提供,我们需要先分析其请求规律。通过浏览器开发者工具(F12)观察网络请求,可以发现评论数据以JSON格式返回。

提示:京东对爬虫有一定反爬机制,建议设置合理的请求间隔(如2秒/次)并配置真实User-Agent

2. 京东评论API深度解析

理解API参数是成功采集数据的关键。京东评论API的核心参数如下:

参数名说明示例值
productId商品ID100012348704
page页码(从0开始)0
pageSize每页评论数10
score评论类型0(全部)
sortType排序方式5(推荐排序)

典型API请求URL结构:

base_url = "https://club.jd.com/comment/productPageComments.action" params = { "productId": "100012348704", "score": 0, "sortType": 5, "page": 0, "pageSize": 10, "isShadowSku": 0, "fold": 1 }

常见问题排查

  • 返回空数据:检查productId是否正确
  • 请求被拒绝:添加合理的请求头(User-Agent、Referer)
  • 数据重复:确保page参数正确递增

3. 爬虫核心代码实现

让我们构建一个完整的爬虫类,包含请求、解析和存储功能:

import requests import json import time import pandas as pd from tqdm import tqdm class JDCommentCrawler: def __init__(self, product_id): self.product_id = product_id self.headers = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36", "Referer": f"https://item.jd.com/{product_id}.html" } self.base_url = "https://club.jd.com/comment/productPageComments.action" def get_comments(self, page=0, page_size=10): params = { "productId": self.product_id, "score": 0, "sortType": 5, "page": page, "pageSize": page_size, "isShadowSku": 0, "fold": 1 } try: response = requests.get( self.base_url, params=params, headers=self.headers ) response.raise_for_status() return response.json() except Exception as e: print(f"请求失败: {e}") return None def parse_comment(self, comment): return { "用户昵称": comment.get("nickname", ""), "评论内容": comment.get("content", ""), "评分": comment.get("score", 0), "时间": comment.get("creationTime", ""), "点赞数": comment.get("usefulVoteCount", 0), "商品型号": comment.get("productColor", ""), "图片数": len(comment.get("images", [])) } def crawl(self, max_pages=100): all_comments = [] for page in tqdm(range(max_pages)): data = self.get_comments(page=page) if data and "comments" in data: for comment in data["comments"]: all_comments.append(self.parse_comment(comment)) time.sleep(1.5) # 遵守爬虫礼仪 return pd.DataFrame(all_comments)

使用示例:

if __name__ == "__main__": crawler = JDCommentCrawler("100012348704") # 完美日记口红 df = crawler.crawl(max_pages=10) # 爬取10页约100条评论 df.to_excel("jd_comments.xlsx", index=False)

4. 数据存储与高级技巧

获取数据后,我们需要考虑如何高效存储和处理。Pandas提供了强大的数据处理能力:

数据清洗示例

# 转换时间格式 df["时间"] = pd.to_datetime(df["时间"]) # 分析评分分布 rating_dist = df["评分"].value_counts(normalize=True) # 提取评论关键词 from collections import Counter word_counts = Counter(" ".join(df["评论内容"]).split())

存储优化方案对比

存储方式优点缺点适用场景
CSV简单通用不支持复杂结构小型数据集
Excel可视化友好性能较差人工分析
SQLite查询高效需要SQL知识中型项目
MongoDB灵活扩展配置复杂大型系统

分页采集优化技巧

  1. 使用多线程加速(注意请求频率)
    from concurrent.futures import ThreadPoolExecutor def crawl_page(page): return crawler.get_comments(page=page) with ThreadPoolExecutor(max_workers=4) as executor: results = list(executor.map(crawl_page, range(10)))
  2. 实现断点续采功能
  3. 添加自动重试机制

5. 反爬应对与伦理考量

京东等电商平台对爬虫有一定防护措施,我们需要遵守合理爬取原则:

  • 请求频率控制:建议间隔1.5-3秒
  • 请求头伪装:使用真实浏览器UA
  • IP轮换:必要时使用代理池
  • 遵守robots.txt:尊重网站爬取规则

注意:大规模商业爬取可能违反网站使用条款,建议用于个人学习和小规模研究

实际项目中遇到的典型问题解决方案:

# 处理请求失败情况 def safe_request(url, max_retries=3): for _ in range(max_retries): try: response = requests.get(url, timeout=10) return response except: time.sleep(5) return None

6. 数据分析应用示例

获取的评论数据可以用于多种分析场景:

情感分析基础实现

from textblob import TextBlob def analyze_sentiment(text): analysis = TextBlob(text) return analysis.sentiment.polarity df["情感得分"] = df["评论内容"].apply(analyze_sentiment)

热门关键词提取

import jieba from wordcloud import WordCloud text = " ".join(df["评论内容"]) words = " ".join(jieba.cut(text)) wordcloud = WordCloud(font_path="simhei.ttf").generate(words)

产品问题定位

# 找出低评分评论中的常见问题 low_rating = df[df["评分"] <= 2] problems = low_rating["评论内容"].str.extract(r"(不足|缺点|问题|不好|不满意)")[0]

在完成数据采集后,记得删除测试数据并妥善保存结果。我曾在一个美妆产品分析项目中,通过评论数据发现了某款口红易脱色的普遍反馈,这为产品改进提供了直接依据。

http://www.jsqmd.com/news/522325/

相关文章:

  • 别再手动巡线了!用馈线自动化(FA)实现配电网故障自愈,5分钟看懂核心原理
  • 告别经纬度模糊聚合!用Uber H3 Java库实现六边形地理网格的5个实战场景
  • 15|Prompt 结构化:目标-上下文-约束-输出格式
  • Qwen-Image-Edit免费体验:阿里通义千问开源模型,零成本玩转AI修图
  • CppStateMachine嵌入式状态机库深度解析
  • ECCV2024新星MambaIRv2:图像去噪效果实测与性能优化技巧
  • PandaCam云台库:面向空间任务的高精度I2C闭环控制方案
  • 别再让大文件撑爆你的Git仓库了!手把手教你用Git LFS管理视频和数据集
  • Power BI数据刷新全攻略:从网关安装到自动刷新配置(2023最新版)
  • Python处理CSV文件行数的3种高效方法(附性能对比)
  • Qwen3-VL-4B Pro快速部署指南:开箱即用的视觉语言模型,看图说话超简单
  • Vue2项目实战:用js-audio-recorder和阿里云WebSocket搞定网页录音转文字(附完整代码)
  • 终局思维:亚马逊领导者的“品类定义权”与终局布局
  • 0~40kPa微差压传感器模块驱动与TM7711嵌入式实现
  • 无刷电机PWM控制实战:从占空比到转速曲线的完整测试记录
  • CoPaw强化学习环境模拟:加速智能体训练与策略评估
  • stlink v1.8.0 升级指南:提升STM32开发效率的开源工具升级方案
  • 实测分享:Fish-Speech-1.5语音合成效果到底有多自然?
  • 账户入侵应急响应机制与身份恢复策略的时效性研究
  • 使用Lingbot-depth-pretrain-vitl-14实现实时深度估计的优化技巧
  • Nginx交叉编译实战:从Ubuntu20.04到ARM64 Linux的完整移植记录
  • 别再手动调焦了!UE5 Sequencer里用Crane Rig+Look-At Tracking,5分钟搞定环绕目标拍摄
  • 从零开始:在Ubuntu22.04上用Anaconda创建Python3.8虚拟环境并安装Pytorch1.12
  • Python实战:用朴素贝叶斯分类器预测西瓜好坏(附完整代码)
  • 墨语灵犀深度评测:33语种互译精度 vs 传统引擎,Hunyuan-MT美学翻译实测
  • vLLM-v0.11.0新手避坑指南:从镜像选择到服务验证全流程
  • 不用GPT-4也能玩转RAG:手把手教你用LightRAG+Ollama搭建本地知识库
  • Python heapq实战:如何用__lt__方法实现自定义优先级队列(附完整代码)
  • TensorBoard可视化实战:从安装到解读F1曲线,新手必看指南
  • Windows Server上OpenVPN 2.4.8双因子认证实战:账号密码+证书,附一键脚本