一、豆瓣电影 肖申克的救赎 短评url=https://movie.douban.com/subject/1292052/comments

二、基本知识点讲解
1. Selenium 的基本使用
Selenium 是一个用于自动化浏览器操作的库,常用于网页测试和爬虫。代码中使用了以下 Selenium 的核心功能:
-
webdriver.Chrome: 启动 Chrome 浏览器实例。 -
driver.get(url): 打开指定的网页。 -
driver.find_elements: 查找页面中符合条件的所有元素。 -
driver.execute_script: 执行 JavaScript 代码(例如点击按钮)。 -
driver.quit(): 关闭浏览器并结束 WebDriver 会话。
2. ChromeDriver 的配置
-
Service: 用于指定 ChromeDriver 的路径。 -
executable_path: ChromeDriver 可执行文件的路径(需与 Chrome 浏览器版本匹配)。
3. 页面元素的定位
Selenium 提供了多种定位页面元素的方式,代码中使用了以下方法:
-
By.XPATH: 使用 XPath 表达式定位元素。-
例如:
//div[@class="comment-item"]表示查找所有 class 为comment-item的div元素。
-
-
By.CLASS_NAME: 通过 class 名称定位元素(代码中未直接使用,但 XPath 中包含了类似功能)。
4. 显式等待与隐式等待
-
显式等待 (
WebDriverWait):-
使用
WebDriverWait和expected_conditions来等待特定条件满足后再执行操作。 -
例如:
EC.presence_of_element_located等待某个元素出现在页面中。 -
优点:更灵活,可以针对特定条件设置超时时间。
-
-
隐式等待 (
time.sleep):-
使用
time.sleep强制等待一段时间。 -
例如:
time.sleep(3)等待 3 秒。 -
缺点:不够灵活,可能会导致不必要的等待。
-
5. 爬取短评的逻辑
-
初始化变量:
-
comments = []: 用于存储爬取到的短评内容。
-
-
爬取短评:
-
使用
find_elements查找所有短评元素。 -
使用
find_element提取每个短评的具体内容(span标签中的文本)。 -
将提取的内容添加到
comments列表中。
-
-
异常处理:
-
使用
try-except捕获可能的异常(例如元素未找到或提取失败),避免程序崩溃。
-
6. 翻页功能
-
查找下一页按钮:
-
使用 XPath 定位下一页按钮(
//a[@class='next'])。
-
-
检查按钮状态:
-
通过
get_attribute("class")检查按钮是否包含disabled类(表示不可点击)。
-
-
点击下一页:
-
使用
driver.execute_script("arguments[0].click();", next_btn)通过 JavaScript 点击按钮(避免某些页面中按钮无法直接点击的问题)。
-
-
等待新页面加载:
-
使用
WebDriverWait等待新页面的短评加载完成。
-
7. 输出结果
-
使用
print输出爬取到的短评数量和具体内容。 -
例如:
短评 1: 这是一条评论内容。
8. 关闭浏览器
-
使用
driver.quit()关闭浏览器并释放资源。

三、具体代码以及详解的展示
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
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# 配置 ChromeDriver
# 使用 Service 类指定 ChromeDriver 的路径
service = Service(executable_path=r"D:\chromdriver\chromedriver-win64\chromedriver.exe")
# 启动 Chrome 浏览器
driver = webdriver.Chrome(service=service)# 初始化变量,用于存储爬取到的短评
comments = []# 打开豆瓣电影短评页面
driver.get("https://movie.douban.com/subject/1292052/comments")
# 等待页面加载,避免页面未完全加载导致元素找不到
time.sleep(3)# 爬取短评
while True:try:# 使用显式等待,等待页面中的短评元素加载完成WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.XPATH, '//div[@class="comment-item"]')))# 查找当前页面中所有的短评元素comment_elements = driver.find_elements(By.XPATH, '//div[@class="comment-item"]')# 遍历每个短评元素,提取内容for comment in comment_elements:try:# 提取短评的具体内容(位于 span 标签中,class 为 "short")content = comment.find_element(By.XPATH, './/span[@class="short"]').text# 将提取的内容添加到 comments 列表中comments.append(content)except Exception as e:# 如果某个短评提取失败,跳过并继续处理下一个短评continueexcept Exception as e:# 如果页面加载失败或短评元素未找到,退出循环break# 尝试翻页try:# 查找下一页按钮next_btn = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.XPATH, "//a[@class='next']")))# 检查下一页按钮是否可点击(是否包含 "disabled" 类)if "disabled" in next_btn.get_attribute("class"):# 如果按钮不可点击,说明已经是最后一页,退出循环breakelse:# 使用 JavaScript 点击下一页按钮(避免某些页面中按钮无法直接点击的问题)driver.execute_script("arguments[0].click();", next_btn)# 等待新页面的短评元素加载完成WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.XPATH, '//div[@class="comment-item"]')))# 等待页面完全加载time.sleep(2)except Exception as e:# 如果找不到下一页按钮或翻页失败,退出循环break# 输出结果
print(f"共爬取到 {len(comments)} 条短评:")
# 遍历 comments 列表,打印每条短评
for i, comment in enumerate(comments, 1):print(f"短评 {i}: {comment}")# 关闭浏览器
driver.quit()
四、运行结果展示(具体如何找到XPATH在专栏里面有)

