项目案例:苏宁易购评论获取
目录
一、技术基础:依赖库与核心函数准备
二、差评获取:从浏览器启动到多页采集
三、好评获取:复用逻辑与适配需求的调整
四、代码设计的核心思路与可优化点
这段代码通过 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 页):
- 调用 get_info(cp_file) 提取当前页评论并写入文件;
- 用 driver.find_elements(By.CSS_SELECTOR, 'a.next.rv-maidian') 定位 “下一页” 按钮 —— 这里用 CSS 选择器定位标签为 a、类名为 next 和 rv-maidian 的元素,正是苏宁易购评论页 “下一页” 按钮的标记;
- 如果找到 “下一页” 按钮(next_tags 非空),就点击按钮(next_tags[0].click())进入下一页;如果未找到(比如已经是最后一页),则跳出循环;
- 点击后通过 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” 文件。
四、代码设计的核心思路与可优化点
这段代码的设计体现了 “目标导向” 和 “简洁实用” 的特点,同时也留下了可扩展的空间。
- 核心思路:以 “最小成本实现目标” 为原则,通过复用逻辑(如好评与差评共用定位方式)、聚焦核心需求(只提取评论内容,不处理无关信息),用较少的代码实现了完整功能。同时通过 “随机等待时间” 模拟真实用户行为,降低了被平台识别为爬虫的风险。
- 可优化方向:
- 增加异常处理:比如页面加载失败、元素定位超时等情况,可通过 try-except 捕获异常,避免程序直接崩溃;
- 动态调整等待时间:根据页面加载速度自动调整等待时长,替代固定范围的随机值,提高效率;
- 增加采集进度提示:在循环中打印当前采集页数,方便监控执行状态。