You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于Selenium的汽车评论多页爬取及星级指标提取求助

解决方案:爬取Cardekho全页汽车评论及星级

问题分析

现有代码仅能爬取单页评论,无法实现1-16页的批量爬取,且未提取评论星级;分页定位使用了冗长且易失效的CSS选择器,导致定位异常。

解决步骤

1. 提取评论星级

页面中每条评论的星级通过rating-static rating-XX类标识(XX为星级×10,例如rating-40对应4星),可通过解析该类名中的数字值计算星级。

2. 实现多页爬取

  • 用WebDriverWait等待元素加载,避免页面未渲染完成导致的定位失败
  • 简化分页逻辑:直接定位「下一页」按钮遍历页面,同时处理可能出现的Cookie同意弹窗
  • 循环遍历16页,每页爬取完成后切换到下一页,直到所有页面处理完毕

完整代码

# 先安装依赖
# pip install selenium
# pip install webdriver-manager

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from webdriver_manager.chrome import ChromeDriverManager

# 初始化浏览器
driver = webdriver.Chrome(ChromeDriverManager().install())
driver.maximize_window()

base_url = "https://www.cardekho.com/user-reviews/maruti-alto-800"
driver.get(base_url)

try:
    # 处理Cookie弹窗(无弹窗则跳过)
    cookie_btn = WebDriverWait(driver, 10).until(
        EC.element_to_be_clickable((By.CSS_SELECTOR, "#wzrk-confirm"))
    )
    cookie_btn.click()
except:
    pass

# 遍历1-16页
for page_num in range(1, 17):
    print(f"===== 正在爬取第 {page_num} 页 =====")
    
    # 等待评论区域加载完成
    WebDriverWait(driver, 10).until(
        EC.presence_of_all_elements_located((By.CSS_SELECTOR, ".contentspace"))
    )
    
    # 获取当前页所有评论
    reviews = driver.find_elements(By.CSS_SELECTOR, ".contentspace")
    
    for review in reviews:
        # 提取标题和评论内容
        title = review.find_element(By.CSS_SELECTOR, "h3 > a").text
        desc = review.find_element(By.CSS_SELECTOR, "p").text
        
        # 提取星级
        rating_element = review.find_element(By.CSS_SELECTOR, ".rating-static")
        rating_class = rating_element.get_attribute("class")
        rating = int(rating_class.split("rating-")[-1]) / 10
        
        print(f"标题: {title}")
        print(f"星级: {rating}★")
        print(f"评论: {desc}\n")
    
    # 最后一页无需点击下一页
    if page_num < 16:
        try:
            next_btn = WebDriverWait(driver, 10).until(
                EC.element_to_be_clickable((By.CSS_SELECTOR, ".next.page-numbers"))
            )
            next_btn.click()
        except:
            print(f"第 {page_num+1} 页加载失败,跳过")
            continue

# 关闭浏览器
driver.quit()

代码说明

  • 用WebDriverWait替代直接定位,确保元素加载完成后再操作,彻底解决定位异常问题
  • Cookie弹窗做了容错处理,避免因弹窗阻断后续操作
  • 星级提取通过解析class属性实现,比定位图标元素更稳定
  • 分页逻辑依赖「下一页」按钮,避免页码按钮动态变化导致的定位失效

内容的提问来源于stack exchange,提问作者HJKWON

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 05:50:24