烂番茄全量观众影评抓取:解决加载崩溃及排序需求问题
烂番茄观众影评抓取优化方案
一、直接通过URL调整影评排序规则
烂番茄支持通过URL参数指定影评排序方式,在原链接末尾添加&sort=oldest即可按时间正序显示最早发布的影评。
示例链接:https://www.rottentomatoes.com/m/inception/reviews?type=user&intcmp=rt-scorecard_audience-score-reviews&sort=oldest
对应的,sort=latest是默认的逆时间排序,可按需切换。
二、优化Selenium加载方案(避免多次点击崩溃)
如果仍需使用Selenium,可通过以下方式降低页面负载、避免崩溃:
- 添加智能等待逻辑:不要盲目循环点击LOAD MORE,使用
WebDriverWait等待按钮可点击状态,同时验证新一批影评加载完成(比如检查影评数量是否增加),示例代码片段:from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC from selenium.webdriver.common.by import By wait = WebDriverWait(driver, 10) click_count = 0 while True: try: load_more_btn = wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, 'button[data-qa="load-more-btn"]'))) current_review_count = len(driver.find_elements(By.CSS_SELECTOR, 'div[data-qa="user-review"]')) load_more_btn.click() # 等待新影评加载完成 wait.until(lambda d: len(d.find_elements(By.CSS_SELECTOR, 'div[data-qa="user-review"]')) > current_review_count) click_count += 1 except: # 无更多按钮时退出循环 break - 启用无头浏览器模式:关闭UI渲染以节省资源,以Chrome为例:
from selenium.webdriver.chrome.options import Options chrome_options = Options() chrome_options.add_argument("--headless=new") driver = webdriver.Chrome(options=chrome_options) - 定期清理页面缓存:每隔若干次点击后,执行JS清理内存:
if click_count % 10 == 0: driver.execute_script("window.localStorage.clear();") driver.execute_script("window.sessionStorage.clear();")
三、更高效的方案:直接调用影评API
通过浏览器开发者工具抓包,可找到烂番茄加载用户影评的异步API接口,直接发送HTTP请求获取数据,无需加载完整页面:
- 接口格式大致为:
https://www.rottentomatoes.com/napi/movie/{movie_slug}/reviews/user - 核心请求参数:
page:分页页码(从0开始)pageSize:每页条数(可设置大于20,比如50或100,减少请求次数)sort:排序方式,oldest为正序,latest为逆序
- 请求时需带上浏览器的
User-Agent、Referer等请求头,避免被反爬拦截。
内容的提问来源于stack exchange,提问作者AAbilio
相关产品推荐
相关产品推荐

