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

Python Selenium爬取Filmweb无限滚动榜单仅获25个标题求解决

解决Filmweb榜单前500个标题爬取问题

问题核心是页面采用动态加载机制,默认仅显示25条内容,原代码的滚动逻辑未正确触发加载。以下是修正后的实现方案:

关键调整点

  • 每次滚动到页面底部触发加载,而非固定位置
  • 等待新元素加载完成后再继续循环,避免提前终止
  • 增加异常处理防止无限循环

完整代码

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
import time

# 初始化浏览器并打开榜单页面
driver = webdriver.Chrome()
driver.get("https://www.filmweb.pl/ranking/film")
driver.maximize_window()

wait = WebDriverWait(driver, 10)
target_count = 500

while True:
    # 获取当前已加载的标题元素
    title_elements = driver.find_elements(By.CSS_SELECTOR, "h2.rankingType__title")
    current_count = len(title_elements)
    
    # 达到目标数量就停止循环
    if current_count >= target_count:
        break
    
    # 滚动到页面底部,触发动态加载
    driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
    
    # 等待新标题加载(直到元素数量增加)
    try:
        wait.until(lambda d: len(d.find_elements(By.CSS_SELECTOR, "h2.rankingType__title")) > current_count)
    except:
        print(f"无法加载更多内容,当前已获取 {current_count} 个标题")
        break
    
    # 给页面留一点加载缓冲时间
    time.sleep(1)

# 提取前500个标题文本
top_500_titles = [elem.text for elem in title_elements[:target_count]]
for num, title in enumerate(top_500_titles, 1):
    print(f"{num}. {title}")

driver.quit()

注意事项

  • 确认CSS选择器h2.rankingType__title是否匹配页面标题元素,若页面结构更新需同步调整
  • 若仍出现加载不完整的情况,可适当延长time.sleep的时长或调整等待超时时间

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 17:14:55