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

Selenium爬虫无法翻页:仅能抓取烂番茄首页影评问题求助

解决烂番茄影评翻页抓取问题

问题分析

  1. 翻页采用AJAX异步加载,URL不会变化,原代码通过current_url == url判断终止循环的逻辑完全错误,导致第一次点击下一页后直接退出。
  2. 下一页按钮的CSS选择器rt-button.next定位不准确,需要用更稳定的方式。
  3. 未正确判断最后一页状态(下一页按钮会被禁用)。

修改方案

  • 改用烂番茄官方标注的data-qa属性定位下一页按钮,选择器为rt-button[data-qa="next-btn"],定位更稳定。
  • 循环终止条件改为检查下一页按钮是否被禁用(存在disabled属性),禁用则说明已到最后一页。
  • 在headless模式下添加窗口大小参数,避免元素因视口过小无法加载。

修改后的代码

import time
import pandas as pd
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.chrome.options import Options

# 设置Chrome选项
chrome_options = webdriver.ChromeOptions()
chrome_options.add_argument("--headless")
chrome_options.add_argument("--window-size=1920,1080")  # 添加窗口大小,避免元素加载不全

# ChromeDriver路径
webdriver_service = Service(r"C:\Users\Brend\Videos\chromedriver_win32")

# 初始化浏览器
driver = webdriver.Chrome(service=webdriver_service, options=chrome_options)

url = "https://www.rottentomatoes.com/m/thor_love_and_thunder/reviews"
driver.get(url)

data = []

while True:
    # 抓取当前页影评
    reviews = driver.find_elements(By.CSS_SELECTOR, 'div.review-row')
    for review in reviews:
        critic_name = review.find_element(By.CSS_SELECTOR, 'a.display-name').text.strip()
        publication = review.find_element(By.CSS_SELECTOR, 'a.publication').text.strip()
        review_quote = review.find_element(By.CSS_SELECTOR, 'p.review-text').text.strip()
        review_date = review.find_element(By.CSS_SELECTOR, 'span[data-qa="review-date"]').text.strip()
        score_icon = review.find_element(By.CSS_SELECTOR, 'score-icon-critic')
        state = score_icon.get_attribute('state') if score_icon else None

        review_data = {
            "Critic Name": critic_name,
            "Publication": publication,
            "Tomato Quality": state,
            "Review Quote": review_quote,
            "Review Date": review_date
        }
        data.append(review_data)

    try:
        # 等待下一页按钮可点击,使用data-qa属性定位
        next_button = WebDriverWait(driver, 10).until(
            EC.element_to_be_clickable((By.CSS_SELECTOR, 'rt-button[data-qa="next-btn"]'))
        )
        # 检查按钮是否被禁用,若禁用则退出循环
        if next_button.get_attribute('disabled') is not None:
            break
        next_button.click()
        time.sleep(2)  # 等待页面加载
    except:
        # 捕获异常(比如按钮不存在),说明已到最后一页
        break

driver.quit()

df = pd.DataFrame(data)
df.to_csv('reviews_data.csv', index=False)
print(df)

关键改动说明

  • 新增--window-size参数,确保headless模式下页面元素正常加载。
  • 替换下一页按钮的CSS选择器为rt-button[data-qa="next-btn"],利用官方标注属性提升稳定性。
  • 循环终止逻辑改为检查按钮disabled属性或捕获异常退出,适配AJAX翻页场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 03:08:25