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

如何用Python Selenium实现网页无限滚动并将行数据存入字典列表

实现滚动加载数据并提取为字典列表的方案

1. 依赖准备

先安装Selenium库,并配置好对应浏览器的驱动(比如ChromeDriver):

pip install selenium

注意:ChromeDriver的版本要和你本地Chrome浏览器版本匹配,可直接放在系统环境变量路径下,或者在初始化webdriver时指定路径。

2. 核心实现代码

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

def scrape_infinite_scroll_data(target_url):
    # 初始化Chrome浏览器实例
    driver = webdriver.Chrome()
    driver.get(target_url)
    driver.maximize_window()

    # 等待表头加载完成,提取列名作为字典的键
    wait = WebDriverWait(driver, 10)
    header_elements = wait.until(EC.visibility_of_all_elements_located((By.XPATH, "//table//thead//th")))
    column_keys = [header.text.strip() for header in header_elements]

    all_rows_data = []
    processed_row_count = 0

    # 循环滚动加载,直到获取到70行数据
    while len(all_rows_data) < 70:
        # 获取当前页面所有已加载的数据行(排除表头)
        current_rows = wait.until(EC.visibility_of_all_elements_located((By.XPATH, "//table//tbody//tr")))
        
        # 处理新增的行,避免重复提取
        for row in current_rows[processed_row_count:]:
            cell_elements = row.find_elements(By.XPATH, "./td")
            # 把每行数据映射为字典,列名为键,单元格文本为值
            row_dict = {column_keys[i]: cell_elements[i].text.strip() for i in range(len(cell_elements))}
            all_rows_data.append(row_dict)
        
        # 已获取足够数据,终止循环
        if len(all_rows_data) >= 70:
            break
        
        # 滚动到当前最后一行,触发后端加载新数据
        last_row = current_rows[-1]
        driver.execute_script("arguments[0].scrollIntoView({behavior: 'smooth', block: 'end'});", last_row)
        
        # 等待新数据加载完成(可根据页面加载速度调整等待时间,或用显式等待判断行数量变化)
        time.sleep(1.5)
        processed_row_count = len(current_rows)

    # 关闭浏览器
    driver.quit()
    return all_rows_data

# 调用函数,替换为你的目标网页地址
result_data = scrape_infinite_scroll_data("https://your-target-page.com")

# 打印前5行数据示例
for i in range(min(5, len(result_data))):
    print(f"第{i+1}行: {result_data[i]}")

3. 关键逻辑说明

  • 滚动触发机制:通过执行JavaScript将当前可见的最后一行滚动到视图内,触发页面的滚动加载逻辑,拉取新数据。
  • 去重处理:用processed_row_count记录上一次已处理的行数,每次只处理新增的行,避免重复提取相同数据。
  • 显式等待:使用WebDriverWait确保元素完全加载后再操作,比固定等待更可靠,减少元素未找到的报错概率。
  • 终止条件:以获取到70行数据为终止标志,也可以优化为“连续两次获取的行数量不变”,适配数据行数不确定的场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 14:23:13