大家好,今天我要分享一个使用 Selenium 爬取苏宁商品好评的实战案例。很多朋友在学习爬虫时,都会遇到动态加载页面的问题,而 Selenium 正是解决这类问题的利器。本文将从环境配置开始,逐行解析代码,带你掌握 Selenium 爬虫的核心知识点。
一、环境配置详解
在开始编写代码前,我们需要先搭建好开发环境,主要包括 Python、Selenium 库和浏览器驱动三个部分。
1. Python 安装
Selenium 是 Python 的一个第三方库,因此首先需要安装 Python。推荐安装 Python 3.7 及以上版本,你可以从Python 官网下载对应系统的安装包,按照提示一步步安装即可。
安装完成后,建议配置环境变量,这样可以在命令行中直接使用python和pip命令。
2. Selenium 库安装
Python 安装完成后,打开命令行(Windows 系统可使用 Win+R 调出运行窗口,输入 cmd 回车),执行以下命令安装 Selenium:
pip install selenium
如果安装速度较慢,可以使用国内镜像源,例如:
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple selenium
3. 浏览器驱动配置
Selenium 需要通过浏览器驱动来控制浏览器,本文使用的是 Edge 浏览器,因此需要下载 Edge 驱动。
- 首先查看自己 Edge 浏览器的版本:打开 Edge,点击右上角三个点→设置→关于 Microsoft Edge,即可看到版本号。
- 然后到Edge 驱动下载页面下载对应版本的驱动。
- 下载后,将驱动文件(msedgedriver.exe)放在一个方便的目录,建议放在 Python 安装目录下,或者添加到系统环境变量中,这样后续代码中就不需要指定驱动路径了。
二、代码逐行解析
接下来,我们逐行解析这段爬取苏宁好评的代码,看看每一行都做了什么。
1. 导入所需库
from selenium import webdriver
from selenium.webdriver.edge.options import Options
from selenium.webdriver.common.by import By
import time
from selenium import webdriver:导入 webdriver 模块,它提供了各种浏览器的驱动接口,通过它可以实例化一个浏览器对象。from selenium.webdriver.edge.options import Options:导入 Edge 浏览器的配置选项类,用于设置浏览器的启动参数。from selenium.webdriver.common.by import By:导入 By 类,它提供了多种元素定位方式,如通过类名、ID、CSS 选择器等。import time:导入时间模块,用于添加等待时间,让页面有足够时间加载。
2. 配置 Edge 浏览器选项
edge_options = Options()
edge_options.binary_location = r"C:\Program Files (x86)\Microsoft\Edge\Application\msedge.exe"
edge_options = Options():创建一个 Edge 浏览器配置对象,通过这个对象可以设置浏览器的各种参数。edge_options.binary_location:指定 Edge 浏览器的可执行文件路径。这一步不是必须的,如果你的 Edge 浏览器安装在默认路径,Selenium 通常能自动找到;但如果安装在非默认路径,就需要手动指定。这里的r表示字符串是原始字符串,避免路径中的反斜杠被转义。
3. 启动浏览器并打开目标页面
driver = webdriver.Edge(options=edge_options) #启动Edge浏览器
driver.get("https://review.suning.com/cluster_cmmdty_review/cluster-38249278-000000012389328846-0000000000-1-good.htm?originalCmmdtyType=general&safp=d488778a.10004.loverRight.166")
driver = webdriver.Edge(options=edge_options):创建一个 Edge 浏览器驱动对象,也就是启动 Edge 浏览器,并应用之前设置的配置。driver.get(url):调用 get 方法打开指定的 URL,这里是苏宁某商品的好评页面。
4. 添加等待时间
time.sleep(3)
time.sleep(3)表示程序暂停 3 秒。这是因为 Selenium 打开页面后,页面内容可能还在加载中,直接获取元素可能会失败,添加等待时间可以确保页面加载完成。
5. 创建文件对象
good_file = open('好评.txt','w')
open('好评.txt','w'):打开一个名为 “好评.txt” 的文件,'w'表示以写入模式打开。如果文件不存在,会创建该文件;如果文件已存在,会清空文件内容。- 将文件对象赋值给
good_file,后续通过该对象向文件写入内容。
6. 定义获取好评的函数
def get_good(file):
goods = driver.find_elements(By.CLASS_NAME, "body-content")
for i in range(len(goods)):
good = driver.find_elements(By.CLASS_NAME, "body-content")[i].text
file.write(good+'\n')
- 定义了一个名为
get_good的函数,参数file是文件对象,用于将好评写入文件。 driver.find_elements(By.CLASS_NAME, "body-content"):通过类名 “body-content” 查找页面中所有的好评元素。find_elements返回的是一个元素列表,如果没有找到元素,返回空列表。By.CLASS_NAME表示通过类名定位元素,这是 Selenium 常用的元素定位方式之一,其他方式还有 By.ID、By.CSS_SELECTOR、By.XPATH 等。- 然后通过 for 循环遍历元素列表,
driver.find_elements(By.CLASS_NAME, "body-content")[i].text获取每个元素的文本内容(即好评内容)。 file.write(good+'\n'):将获取到的好评内容写入文件,并在每个好评后添加一个换行符,使内容更清晰。
7. 调用函数获取第一页好评
get_good(good_file)
调用get_good函数,传入之前创建的文件对象good_file,从而将第一页的好评写入 “好评.txt” 文件。
8. 处理分页
time.sleep(5)
nextbeaf=driver.find_element(By.CSS_SELECTOR, ".next.rv-maidian").click()
while True:
try:
# 等待页面加载
time.sleep(1)
# 获取当前页好评
get_good(good_file)
# 点击下一页
driver.find_element(By.CSS_SELECTOR, ".next.rv-maidian").click()
except:
# 如果找不到下一页按钮,退出循环
break
time.sleep(5):再次添加等待时间,确保页面稳定。driver.find_element(By.CSS_SELECTOR, ".next.rv-maidian").click():通过 CSS 选择器定位到 “下一页” 按钮,并调用click()方法点击该按钮。这里的 CSS 选择器.next.rv-maidian表示 class 为 “next” 且 class 为 “rv-maidian” 的元素(即下一页按钮)。while True::这是一个循环条件,本意是当存在下一页按钮时继续循环。
9. 关闭文件
good_file.close()
- 完成爬取后,调用
close()方法关闭文件,释放资源。
10.综合代码:
from selenium import webdriver
from selenium.webdriver.edge.options import Options
from selenium.webdriver.common.by import By
import time
edge_options = Options()
edge_options.binary_location = r"C:\Program Files (x86)\Microsoft\Edge\Application\msedge.exe"
driver = webdriver.Edge(options=edge_options) #启动Edge浏览器
driver.get("https://review.suning.com/cluster_cmmdty_review/cluster-38249278-000000012389328846-0000000000-1-good.htm?originalCmmdtyType=general&safp=d488778a.10004.loverRight.166")
time.sleep(3)
good_file = open('好评.txt','w')
def get_good(file):
goods = driver.find_elements(By.CLASS_NAME, "body-content")
for i in range(len(goods)):
good = driver.find_elements(By.CLASS_NAME, "body-content")[i].text
file.write(good+'\n')
get_good(good_file)
time.sleep(5)
nextbeaf=driver.find_element(By.CSS_SELECTOR, ".next.rv-maidian").click()
while True:
try:
# 等待页面加载
time.sleep(1)
# 获取当前页好评
get_good(good_file)
# 点击下一页
driver.find_element(By.CSS_SELECTOR, ".next.rv-maidian").click()
except:
# 如果找不到下一页按钮,退出循环
break
652

被折叠的 条评论
为什么被折叠?



