零基础入门 Python 爬虫:手把手教你爬取苏宁商品评论(好评 + 差评)
作为编程新手,你是否也曾好奇:那些电商平台上成千上万的商品评论,能不能用代码批量抓取下来?是否想过通过分析这些评论,了解一款产品的优缺点?今天这篇文章,我将以 “爬取苏宁手机评论” 为例,从 0 开始讲解 Python 爬虫的实现过程,哪怕你是刚接触编程的小白,跟着步骤走也能轻松上手。
本文全程使用通俗易懂的语言,避开复杂的专业术语,结合完整可运行的代码,详细拆解每一个环节,最终实现 “自动爬取苏宁商品好评 + 差评,并保存到本地文件” 的完整功能。全文约 4000 字,包含环境搭建、代码解析、问题修复、功能扩展等核心内容,耐心看完,你将掌握 Selenium 爬虫的核心逻辑。
一、爬虫入门:先搞懂几个核心概念
在写代码之前,我们先花几分钟搞懂几个基础概念,避免后续看到代码一脸懵。
1.1 什么是爬虫?
简单来说,爬虫就是模拟人的操作,自动访问网页、提取指定信息的程序。比如我们手动打开苏宁评论页,一页一页翻、复制评论内容,这个过程重复且枯燥,而爬虫可以替我们完成这些机械操作 —— 自动打开浏览器、加载页面、提取评论、翻页、保存内容,全程无需人工干预。
1.2 为什么选 Selenium?
爬取网页的工具很多(比如 Requests+BeautifulSoup),但苏宁的评论页面采用了动态加载技术,普通的请求工具无法直接获取到评论内容。而Selenium 是一款自动化测试工具,可以模拟真实的浏览器操作(比如点击、翻页、等待页面加载),完美解决动态页面的爬取问题,对新手也非常友好。
1.3 核心名词解释(小白友好版)
- 驱动(Driver):可以理解为 “代码和浏览器之间的桥梁”,比如我们用 Selenium 控制 Edge 浏览器,就需要 Edge 驱动来传递指令;
- 定位元素:爬虫要提取 “评论内容”,首先得找到评论在网页中的位置,这个过程就是 “定位元素”,常用的方式有按类名、按 XPath、按 ID 等;
- 等待机制:网页加载需要时间,如果代码执行速度比页面加载快,就会出现 “找不到元素” 的错误,所以需要设置 “等待”,等页面加载完成后再执行后续操作;
- 翻页逻辑:判断页面是否有 “下一页” 按钮,有就点击,没有就停止,这是爬取多页内容的核心逻辑。
二、环境搭建:准备工作一步都不能少
工欲善其事,必先利其器。在写代码之前,我们需要先搭建好运行环境,这是新手最容易踩坑的环节,我会把每一步都写得清清楚楚。
2.1 安装 Python(已安装可跳过)
首先确保你的电脑安装了 Python,推荐安装 3.8 及以上版本:
- 打开 Python 官网(https://www.python.org/downloads/),下载对应系统的安装包;
- 安装时勾选 “Add Python to PATH”(关键!否则后续无法在命令行调用 Python);
- 验证:打开电脑的 “命令提示符(CMD)”,输入
python --version,如果显示 Python 版本号,说明安装成功。
2.2 安装 Selenium 库
Selenium 是第三方库,需要手动安装:
- 打开 CMD,输入命令:
pip install selenium; - 等待安装完成,输入
pip show selenium,如果显示 Selenium 的版本信息,说明安装成功。
2.3 关于浏览器驱动(新手不用手动下载)
很多教程会让新手手动下载浏览器驱动,但新版 Selenium 已经实现了 “驱动自动管理”—— 运行代码时,会自动检测你的浏览器版本,并下载匹配的驱动,无需手动操作,大大降低了新手的门槛。
三、核心代码解析:从基础版到完整版
我们先从最基础的代码开始,逐步拆解每一个功能,再修复其中的问题,最终得到一个健壮的完整版代码。
3.1 基础版代码(小白入门级)
先看一段最基础的爬取苏宁好评的代码,我们逐行解析:
python
运行
# 导入需要的库 from selenium import webdriver from selenium.webdriver.edge.options import Options from selenium.webdriver.common.by import By import time # 1. 配置Edge浏览器 # 定义Edge浏览器的安装路径(适配大多数Windows系统) __browser_url = r"C:\Program Files (x86)\Microsoft\Edge\Application\msedge.exe" # 创建配置对象 chrome_options = Options() # 指定浏览器路径 chrome_options.binary_location = __browser_url # 初始化浏览器驱动 driver = webdriver.Edge(options=chrome_options) # 2. 访问苏宁好评页面 review_url = 'https://review.suning.com/cluster_cmmdty_review/cluster-38249278-000000012389328846-0000000000-1-good.htm?originalCm' driver.get(review_url) # 3. 打开本地文件,用于保存评论 yzpj_file = open('优质评价.txt', 'w') # 4. 定义函数:提取当前页面的评论 def get_py_content(file): # 按类名定位评论元素(body-content是评论内容的类名) pj_elements_content = driver.find_elements(by=By.CLASS_NAME, value='body-content') # 遍历所有评论元素,提取文本并写入文件 for i in range(len(pj_elements_content)): file.write(pj_elements_content[i].text + '\n') # 5. 调用函数,获取第一页评论 get_py_content(yzpj_file) # 6. 翻页逻辑:循环点击“下一页” # 按XPath定位下一页按钮 next_elements = driver.find_elements_by_xpath('//*[@class="next rv-maidian "]') # 如果找到下一页按钮,就点击 while next_elements != []: next_element = next_elements[0] time.sleep(1) # 等待1秒,让页面加载 next_element.click() # 点击下一页 get_py_content(yzpj_file) # 提取新页面的评论 next_elements = driver.find_elements_by_xpath('//*[@class="next rv-maidian "]') # 7. 关闭文件 yzpj_file.close() 3.2 基础版代码逐行解析(小白必看)
(1)库导入部分
python
运行
from selenium import webdriver # 核心库,用于控制浏览器 from selenium.webdriver.edge.options import Options # 用于配置浏览器选项 from selenium.webdriver.common.by import By # 用于定位元素的常量 import time # 用于设置等待时间 这部分是 “导入工具”,就像做饭前先把锅碗瓢盆准备好一样,后续代码需要用到这些库的功能。
(2)浏览器配置部分
python
运行
__browser_url = r"C:\Program Files (x86)\Microsoft\Edge\Application\msedge.exe" chrome_options = Options() chrome_options.binary_location = __browser_url driver = webdriver.Edge(options=chrome_options) __browser_url:指定 Edge 浏览器的安装路径,不同电脑可能路径不同(比如有的是C:\Program Files\Microsoft\Edge\Application\msedge.exe);chrome_options:创建浏览器配置对象,相当于给浏览器设置 “参数”;driver = webdriver.Edge(...):创建浏览器驱动对象,后续所有操作(打开网页、点击按钮)都通过这个对象完成。
(3)访问网页 + 保存文件
python
运行
review_url = '目标URL' driver.get(review_url) # 打开指定网页 yzpj_file = open('优质评价.txt', 'w') # 打开本地文件,'w'表示“写入模式” driver.get(url):模拟手动在浏览器地址栏输入 URL 并回车;open('优质评价.txt', 'w'):在代码同级目录创建 / 打开 “优质评价.txt” 文件,准备写入评论内容。
(4)提取评论的函数
python
运行
def get_py_content(file): pj_elements_content = driver.find_elements(by=By.CLASS_NAME, value='body-content') for i in range(len(pj_elements_content)): file.write(pj_elements_content[i].text + '\n') driver.find_elements(By.CLASS_NAME, 'body-content'):按 “类名” 查找网页中所有评论元素(打开苏宁评论页,按 F12 可看到评论内容的 class 是 body-content);element.text:提取元素的文本内容(也就是评论本身);file.write(...):把提取的评论写入文件,\n表示换行。
(5)翻页逻辑
python
运行
next_elements = driver.find_elements_by_xpath('//*[@class="next rv-maidian "]') while next_elements != []: next_element = next_elements[0] time.sleep(1) next_element.click() get_py_content(yzpj_file) next_elements = driver.find_elements_by_xpath('//*[@class="next rv-maidian "]') find_elements_by_xpath(...):按 XPath 定位 “下一页” 按钮;while next_elements != []:如果找到下一页按钮,就进入循环;next_element.click():模拟手动点击 “下一页” 按钮;- 循环执行 “点击下一页→提取评论”,直到找不到下一页按钮为止。
3.3 基础版代码的问题(新手必踩的坑)
运行上面的基础版代码,大概率会报错或出现各种问题,主要原因有:
问题 1:find_elements_by_xpath已被废弃
新版 Selenium 中,find_elements_by_xpath()、find_elements_by_class_name()等写法已经被移除,必须改用统一的写法:find_elements(By.XPATH, '路径'),否则会直接报错。
问题 2:缺少等待机制,页面加载不完整
基础版只用了time.sleep(1)(固定等待 1 秒),但网页加载速度受网络影响,1 秒可能不够 —— 代码执行到 “查找评论元素” 时,页面还没加载完,就会出现 “找不到元素” 的错误。
问题 3:文件操作不规范,容易丢失数据
直接用open(...)打开文件,如果代码中途报错,文件会来不及关闭,导致已写入的内容丢失;且没有指定编码,爬取中文评论时会出现乱码。
问题 4:浏览器驱动未关闭,残留进程
代码执行完后,没有关闭浏览器驱动,会导致电脑后台残留多个 Edge 进程,占用系统资源。
问题 5:浏览器路径不兼容
不同电脑的 Edge 安装路径可能不同(比如 32 位系统和 64 位系统),固定路径会导致部分电脑运行失败。
3.4 完整版代码(修复所有问题,小白可直接用)
针对上面的问题,我们对代码进行全面优化,得到最终的完整版(以爬取好评为例):
python
运行
''' 爬取苏宁商品评论(好评)- 完整版 适用人群:Python零基础小白 功能:自动打开浏览器、爬取多页好评、保存到本地文件、自动关闭浏览器 ''' from selenium import webdriver from selenium.webdriver.edge.options import Options from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC import time import os # ===================== 第一步:初始化浏览器驱动(兼容不同系统) ===================== def init_edge_driver(): """ 初始化Edge浏览器驱动 功能:自动检测Edge路径、添加防检测配置、设置隐式等待 """ # 创建浏览器配置对象 chrome_options = Options() # 1. 自动检测Edge浏览器路径(兼容32/64位系统) edge_paths = [ r"C:\Program Files (x86)\Microsoft\Edge\Application\msedge.exe", r"C:\Program Files\Microsoft\Edge\Application\msedge.exe" ] for path in edge_paths: if os.path.exists(path): chrome_options.binary_location = path break # 2. 添加防检测配置(避免被网站识别为爬虫) chrome_options.add_experimental_option("excludeSwitches", ["enable-automation"]) chrome_options.add_experimental_option('useAutomationExtension', False) # 3. 创建驱动对象 + 设置隐式等待(全局等待10秒) driver = webdriver.Edge(options=chrome_options) driver.implicitly_wait(10) # 所有元素查找操作最多等待10秒 return driver # ===================== 第二步:核心爬取逻辑 ===================== if __name__ == "__main__": # 1. 初始化浏览器 driver = init_edge_driver() print("浏览器已启动...") # 2. 目标URL(苏宁商品好评页) review_url = 'https://review.suning.com/cluster_cmmdty_review/cluster-38249278-000000012389328846-0000000000-1-good.htm?originalCm' # 3. 打开目标网页 driver.get(review_url) print(f"已打开网页:{review_url}") # 4. 打开本地文件(用with语句自动关闭,避免数据丢失;指定UTF-8编码防中文乱码) with open('优质评价.txt', 'w', encoding='utf-8') as yzpj_file: # 定义提取评论的函数 def get_comment_content(file): """ 提取当前页面的评论内容 参数:file - 要写入的文件对象 """ # 显式等待:直到评论元素加载完成(最多等10秒) WebDriverWait(driver, 10).until( EC.presence_of_all_elements_located((By.CLASS_NAME, 'body-content')) ) # 查找所有评论元素 comment_elements = driver.find_elements(By.CLASS_NAME, 'body-content') # 遍历并写入文件 for element in comment_elements: content = element.text.strip() # 去除首尾空格 if content: # 过滤空评论 file.write(content + '\n\n') # 空行分隔,提升可读性 print(f"已抓取评论:{content[:50]}...") # 打印预览(只显示前50字) # ===== 第一步:提取第一页评论 ===== print("开始抓取第一页评论...") get_comment_content(yzpj_file) # ===== 第二步:循环翻页提取 ===== page_num = 2 while True: try: # 显式等待:直到下一页按钮可点击(最多等5秒) next_button = WebDriverWait(driver, 5).until( EC.element_to_be_clickable((By.XPATH, '//*[@class="next rv-maidian "]')) ) # 点击下一页 print(f"正在跳转到第{page_num}页...") next_button.click() time.sleep(2) # 等待页面完全加载(动态页面必备) # 提取当前页评论 get_comment_content(yzpj_file) page_num += 1 except: # 捕获异常 = 没有下一页了,退出循环 print("已爬取完所有页面!") break # ===================== 第三步:清理资源 ===================== print("开始关闭浏览器...") driver.quit() # 关闭浏览器+驱动(区别于driver.close(),后者只关标签页) print("爬取完成!评论已保存到「优质评价.txt」文件中。") 3.5 完整版代码核心优化点解析
优化 1:自动检测浏览器路径
python
运行
edge_paths = [ r"C:\Program Files (x86)\Microsoft\Edge\Application\msedge.exe", r"C:\Program Files\Microsoft\Edge\Application\msedge.exe" ] for path in edge_paths: if os.path.exists(path): chrome_options.binary_location = path break 遍历两个常见的 Edge 安装路径,自动选择存在的路径,兼容不同系统。
优化 2:智能等待机制(替代固定 sleep)
python
运行
# 显式等待:等评论元素加载完成 WebDriverWait(driver, 10).until( EC.presence_of_all_elements_located((By.CLASS_NAME, 'body-content')) ) # 隐式等待:全局设置,所有元素查找最多等10秒 driver.implicitly_wait(10) - 显式等待:针对特定元素设置等待,元素加载完成后立即执行,比固定 sleep 更高效;
- 隐式等待:全局生效,避免重复写等待代码。
优化 3:规范的文件操作
python
运行
with open('优质评价.txt', 'w', encoding='utf-8') as yzpj_file: # 写入操作... with语句:无论代码是否报错,都会自动关闭文件,避免数据丢失;encoding='utf-8':指定编码格式,彻底解决中文乱码问题。
优化 4:修复废弃的 API
python
运行
# 错误写法(已废弃) driver.find_elements_by_xpath('xxx') # 正确写法 driver.find_elements(By.XPATH, 'xxx') 改用新版 Selenium 的标准写法,避免报错。
优化 5:资源清理 + 防检测
python
运行
# 关闭浏览器+驱动,彻底清理进程 driver.quit() # 添加防检测配置,降低被封IP的风险 chrome_options.add_experimental_option("excludeSwitches", ["enable-automation"]) chrome_options.add_experimental_option('useAutomationExtension', False) 四、功能扩展:爬取苏宁商品差评
掌握了好评的爬取方法,差评的爬取只需要修改两个地方:目标 URL + 输出文件名,核心逻辑完全一致。
4.1 爬取差评的完整代码
python
运行
''' 爬取苏宁商品评论(差评)- 完整版 适用人群:Python零基础小白 功能:自动打开浏览器、爬取多页差评、保存到本地文件、自动关闭浏览器 ''' from selenium import webdriver from selenium.webdriver.edge.options import Options from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC import time import os # ===================== 第一步:初始化浏览器驱动(兼容不同系统) ===================== def init_edge_driver(): """ 初始化Edge浏览器驱动 功能:自动检测Edge路径、添加防检测配置、设置隐式等待 """ chrome_options = Options() # 自动检测Edge浏览器路径(兼容32/64位系统) edge_paths = [ r"C:\Program Files (x86)\Microsoft\Edge\Application\msedge.exe", r"C:\Program Files\Microsoft\Edge\Application\msedge.exe" ] for path in edge_paths: if os.path.exists(path): chrome_options.binary_location = path break # 添加防检测配置 chrome_options.add_experimental_option("excludeSwitches", ["enable-automation"]) chrome_options.add_experimental_option('useAutomationExtension', False) # 创建驱动对象 + 设置隐式等待 driver = webdriver.Edge(options=chrome_options) driver.implicitly_wait(10) return driver # ===================== 第二步:核心爬取逻辑 ===================== if __name__ == "__main__": # 1. 初始化浏览器 driver = init_edge_driver() print("浏览器已启动...") # 2. 目标URL(替换为差评URL) review_url = 'https://review.suning.com/cluster_cmmdty_review/cluster-38249278-000000012389328846-0000000000-1-bad.htm?originalCmmdtyType=general&safp=d488778a.10004.loverRight.166' # 3. 打开目标网页 driver.get(review_url) print(f"已打开网页:{review_url}") # 4. 打开本地文件(文件名改为“差评.txt”) with open('差评.txt', 'w', encoding='utf-8') as bad_comment_file: # 定义提取评论的函数 def get_comment_content(file): """提取当前页面的差评内容""" # 显式等待:直到评论元素加载完成 WebDriverWait(driver, 10).until( EC.presence_of_all_elements_located((By.CLASS_NAME, 'body-content')) ) # 查找所有差评元素 comment_elements = driver.find_elements(By.CLASS_NAME, 'body-content') # 遍历并写入文件 for element in comment_elements: content = element.text.strip() if content: file.write(content + '\n\n') print(f"已抓取差评:{content[:50]}...") # ===== 第一步:提取第一页差评 ===== print("开始抓取第一页差评...") get_comment_content(bad_comment_file) # ===== 第二步:循环翻页提取 ===== page_num = 2 while True: try: # 显式等待:直到下一页按钮可点击 next_button = WebDriverWait(driver, 5).until( EC.element_to_be_clickable((By.XPATH, '//*[@class="next rv-maidian "]')) ) # 点击下一页 print(f"正在跳转到第{page_num}页...") next_button.click() time.sleep(2) # 提取当前页差评 get_comment_content(bad_comment_file) page_num += 1 except: print("已爬取完所有差评页面!") break # ===================== 第三步:清理资源 ===================== print("开始关闭浏览器...") driver.quit() print("爬取完成!差评已保存到「差评.txt」文件中。") 4.2 差评爬取的核心改动
对比好评代码,差评代码仅改动了两处:
- 目标 URL:替换为你提供的苏宁差评 URL;
- 输出文件:将
优质评价.txt改为差评.txt,同时变量名从yzpj_file改为bad_comment_file,让代码语义更清晰; - 提示文字:将 “评论” 改为 “差评”,方便运行时识别进度。
五、运行代码的详细步骤(小白手把手版)
步骤 1:新建 Python 文件
- 在电脑桌面(或任意文件夹)右键 → 新建 → 文本文档;
- 将文本文档重命名为
苏宁评论爬虫.py(注意:后缀必须是.py,如果看不到后缀,需要在 “文件夹选项” 中勾选 “显示文件扩展名”)。
步骤 2:粘贴代码
双击打开苏宁评论爬虫.py文件,将上面的好评 / 差评代码完整粘贴进去,保存并关闭。
步骤 3:运行代码
- 右键点击
苏宁评论爬虫.py→ 选择 “用 Python 打开”(或 “打开方式”→ 选择 Python); - 此时会弹出一个命令行窗口,同时自动打开 Edge 浏览器,开始爬取评论;
- 等待运行完成(命令行窗口显示 “爬取完成”),关闭窗口即可。
步骤 4:查看结果
回到代码所在文件夹,会看到生成的好评.txt/差评.txt文件,双击打开即可查看爬取的评论内容。
六、常见问题解决(小白避坑指南)
问题 1:运行代码时提示 “找不到 Python”
- 原因:安装 Python 时未勾选 “Add Python to PATH”;
- 解决:重新安装 Python,务必勾选该选项;或手动配置环境变量(新手建议重新安装)。
问题 2:爬取的文件为空 / 只有部分评论
- 原因:页面加载不完整,或元素定位失败;
- 解决:
- 增加
time.sleep(2)中的数字(比如改为 3); - 检查网页中评论元素的 class 是否为
body-content(按 F12 查看); - 确保网络通畅,避免页面加载超时。
- 增加
问题 3:中文乱码
- 原因:文件写入时未指定编码;
- 解决:确保
open(...)中包含encoding='utf-8'。
问题 4:浏览器打开后立即关闭
- 原因:代码执行完成后调用了
driver.quit(),属于正常现象; - 解决:如果想保留浏览器,可注释掉
driver.quit()(但不推荐,会残留进程)。
问题 5:提示 “找不到下一页按钮”
- 原因:当前页面已经是最后一页,或下一页按钮的 XPath 路径变化;
- 解决:这是正常提示,说明爬取已完成;如果确认有下一页但未爬取,需重新检查下一页按钮的 XPath。
七、进阶思考:爬虫可以做什么?
爬取到评论后,我们还可以做更多事情:
- 评论分词 / 词云分析:用 jieba 库对评论分词,生成词云,直观看到高频词汇(比如 “电池耐用”“拍照清晰”“卡顿” 等);
- 情感分析:用第三方库(比如 snownlp)分析评论的情感倾向,统计好评 / 差评的占比;
- 数据可视化:用 matplotlib 绘制好评 / 差评数量对比图,或高频问题的柱状图;
- 批量爬取多个商品:修改代码,循环爬取多个商品的评论,做竞品分析。
八、爬虫的注意事项(必看)
- 遵守网站规则:爬取前查看网站的
robots.txt文件(比如https://www.suning.com/robots.txt),确认允许爬取的内容; - 控制爬取速度:不要频繁请求,避免给网站服务器造成压力(本文代码中设置了
time.sleep(2),就是为了控制速度); - 仅用于学习:本文代码仅作为学习用途,请勿用于商业用途或恶意爬取;
- 注意 IP 封禁:如果频繁爬取,可能会被网站封禁 IP,可适当增加等待时间,或使用代理 IP(新手暂无需掌握)。
总结
本文从零基础视角出发,完整讲解了 “用 Python+Selenium 爬取苏宁商品评论” 的全过程,核心要点如下:
- 新手爬取动态页面优先选择 Selenium,其模拟浏览器操作的特性能解决大部分动态加载问题;
- 基础版代码的核心问题是 “废弃 API + 缺少等待 + 文件操作不规范”,优化后可大幅提升稳定性;
- 爬取好评 / 差评的核心逻辑一致,仅需修改目标 URL 和输出文件名;
- 爬虫开发需注意 “等待机制” 和 “资源清理”,这是新手最容易忽略的关键点。
希望这篇文章能帮助你入门 Python 爬虫,从 “看懂代码” 到 “写出代码”,再到 “优化代码”。编程的核心是 “解决问题”,遇到报错不要怕,逐一分析、逐一修复,你会发现爬虫并没有想象中那么难。