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

项目案例:苏宁易购评论获取

目录

一、技术基础:依赖库与核心函数准备

二、差评获取:从浏览器启动到多页采集

三、好评获取:复用逻辑与适配需求的调整

四、代码设计的核心思路与可优化点


这段代码通过 Selenium 实现了苏宁易购商品评论的自动化采集,核心目标是分别获取指定商品的差评与好评并保存到本地文件。代码结构清晰、逻辑明确,既体现了自动化爬虫的基础思路,也包含了针对网页交互的细节处理。下面从技术准备、功能实现到执行逻辑,对代码进行逐部分解析。

from selenium import webdriver
from selenium.webdriver.edge.options import Options
from selenium.webdriver.common.by import By
import time
import randomdef get_info(file):eles = driver.find_elements(by=By.CLASS_NAME,value='body-content')for i in range(len(eles)):file.write(eles[i].text + '\n\n')
edge_options = Options()# 差评获取
edge_options.binary_location = r"C:\Program Files (x86)\Microsoft\Edge\Application\msedge.exe"
driver = webdriver.Edge(options=edge_options)
driver.get("https://review.suning.com/cluster_cmmdty_review/cluster-38249278-000000012389328846-0000000000-1-bad.htm?originalCmmdtyType=general&safp=d488778a.10004.loverRight.166")
cp_file = open('差评.txt','w')
cp_max_pages = 2  # 设置最大页数
for i in range(cp_max_pages):get_info(cp_file)next_tags = driver.find_elements(By.CSS_SELECTOR, 'a.next.rv-maidian')if not next_tags:breaknext_tags[0].click()time.sleep(2 * random.uniform(1, 2))
cp_file.close()# 好评获取
driver.get("https://review.suning.com/cluster_cmmdty_review/cluster-38249278-000000012389328846-0000000000-1-good.htm?originalCmmdtyType=general&safp=d488778a.10004.loverRight.166")
yzpj_file = open('优质评价.txt','w')
yzpj_max_pages = 1774  # 设置最大页数
for i in range(yzpj_max_pages):get_info(yzpj_file)next_tags = driver.find_elements(By.CSS_SELECTOR, 'a.next.rv-maidian')if not next_tags:breaknext_tags[0].click()time.sleep(2 * random.uniform(1, 2))
yzpj_file.close()

一、技术基础:依赖库与核心函数准备

代码的开篇先完成了基础准备工作,包括依赖库导入和核心功能函数定义,这是后续所有操作的 “前置条件”。

  • 依赖库导入:代码首先导入了 selenium 相关模块(webdriver 用于启动浏览器、Options 用于配置浏览器参数、By 用于元素定位),以及 time(控制等待时间)和 random(生成随机数)。这些库共同支撑了 “模拟浏览器操作”“定位网页元素”“控制执行节奏” 三大核心需求。
  • 核心函数 get_info(file) 定义:这个函数是提取评论的 “主力”,功能是将当前页面的评论内容写入指定文件。它通过 driver.find_elements(by=By.CLASS_NAME, value='body-content') 定位页面中所有类名为 body-content 的元素 —— 这正是苏宁易购评论内容在网页中的标记,然后遍历这些元素,将每个元素的文本内容(eles[i].text)写入传入的文件(file),并添加换行符保证格式清晰。

二、差评获取:从浏览器启动到多页采集

差评获取部分是代码的第一个核心流程,完整实现了 “启动浏览器→访问目标页面→提取评论→翻页→循环采集” 的闭环。

  • 浏览器配置与启动:通过 Options() 创建浏览器配置对象,并用 binary_location 指定 Edge 浏览器的安装路径(C:\Program Files (x86)\Microsoft\Edge\Application\msedge.exe),确保 webdriver 能正确找到并启动浏览器。随后通过 webdriver.Edge(options=edge_options) 初始化浏览器驱动,并调用 driver.get() 访问差评列表的目标 URL—— 这个 URL 直接指向特定商品的差评页面,省去了手动导航的步骤。
  • 文件与采集参数设置:创建 “差评.txt” 文件用于存储结果,并设置 cp_max_pages = 2 作为最大采集页数(可根据需求调整)。
  • 多页采集逻辑:通过 for 循环控制采集页数(最多 cp_max_pages 页):
  1. 调用 get_info(cp_file) 提取当前页评论并写入文件;
  2. 用 driver.find_elements(By.CSS_SELECTOR, 'a.next.rv-maidian') 定位 “下一页” 按钮 —— 这里用 CSS 选择器定位标签为 a、类名为 next 和 rv-maidian 的元素,正是苏宁易购评论页 “下一页” 按钮的标记;
  3. 如果找到 “下一页” 按钮(next_tags 非空),就点击按钮(next_tags[0].click())进入下一页;如果未找到(比如已经是最后一页),则跳出循环;
  4. 点击后通过 time.sleep(2 * random.uniform(1, 2)) 等待 2-4 秒(随机时间),既避免频繁请求被平台限制,也更接近真实用户翻页的节奏。
  • 收尾操作:完成采集后,通过 cp_file.close() 关闭文件,释放资源。

三、好评获取:复用逻辑与适配需求的调整

好评获取的整体逻辑与差评一致,但根据 “好评数量更多” 的实际情况做了针对性调整,体现了代码的灵活性。

  • 复用核心逻辑:好评获取同样遵循 “访问目标 URL→提取评论→翻页循环” 的流程,甚至连元素定位方式(body-content 类名、a.next.rv-maidian 选择器)都完全复用 —— 这是因为苏宁易购的好评和差评页面结构一致,无需重复开发。
  • 适配好评特点的调整:唯一的区别在于目标 URL(指向好评列表页面)和最大页数(yzpj_max_pages = 1774)。由于好评数量通常远多于差评,这里设置了更大的页数,确保能采集到足够多的样本。
  • 相同的细节处理:翻页后的随机等待(2 * random.uniform(1, 2))同样适用,保证了操作的稳定性;采集结束后也通过 yzpj_file.close() 关闭 “优质评价.txt” 文件。

四、代码设计的核心思路与可优化点

这段代码的设计体现了 “目标导向” 和 “简洁实用” 的特点,同时也留下了可扩展的空间。

  • 核心思路:以 “最小成本实现目标” 为原则,通过复用逻辑(如好评与差评共用定位方式)、聚焦核心需求(只提取评论内容,不处理无关信息),用较少的代码实现了完整功能。同时通过 “随机等待时间” 模拟真实用户行为,降低了被平台识别为爬虫的风险。
  • 可优化方向
  1. 增加异常处理:比如页面加载失败、元素定位超时等情况,可通过 try-except 捕获异常,避免程序直接崩溃;
  2. 动态调整等待时间:根据页面加载速度自动调整等待时长,替代固定范围的随机值,提高效率;
  3. 增加采集进度提示:在循环中打印当前采集页数,方便监控执行状态。
http://www.xdnf.cn/news/15842.html

相关文章:

  • 民法学学习笔记(个人向) Part.1
  • 【智能协同云图库】第一期:用户管理接口设计与功能实现
  • 【Java学习|黑马笔记|Day18】Stream流|获取、中间方法、终结方法、收集方法及其练习
  • 超大整数任意进制之间在线转换工具
  • 剑指offer67_构建乘积数组
  • 周志华《机器学习导论》第11章 特征选择与稀疏学习
  • PyTorch里的张量及张量的操作
  • [前端技术基础]CSS选择器冲突解决方法-由DeepSeek产生
  • 前端的测试
  • 如何实战优化SEO关键词提升百度排名?
  • 深度学习图像分类数据集—百种病虫害分类
  • 【KDD2025】时间序列|Merlin:不固定缺失率下时间序列预测新SOTA!
  • C++ - 仿 RabbitMQ 实现消息队列--服务端核心模块实现(一)
  • 服务器上的文件复制到本地 Windows 系统
  • python网络爬虫小项目(爬取评论)超级简单
  • git fork的项目远端标准协作流程 仓库设置[设置成upstream]
  • 快速上手git
  • LINUX入门(二)QT的安装及运行环境搭建
  • 【实习总结】Qt中如何使用QSettings操作.ini配置文件
  • Vue中组件的生命周期
  • 08_Opencv_基本图形绘制
  • Docker实战:使用Docker部署envlinks极简个人导航页
  • 激光雷达和相机在线标定
  • [C/C++安全编程]_[中级]_[如何安全使用循环语句]
  • 语言学校为何成为IT润日路径的制度跳板?签证与迁移结构的工程化拆解
  • 交通出行大前端与 AI 融合:智能导航与出行预测
  • 智能制造——48页毕马威:汽车营销与研发数字化研究【附全文阅读】
  • jxORM--编程指南
  • linux + 宝塔面板 部署 django网站 启动方式:uwsgi 和gunicorn如何选择 ?
  • windows命令提示符cmd使用