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

如何使用Selenium遍历分页,提取表格的全部数据?

使用Selenium提取带分页的表格全量数据

你的问题在于目标页面的分页数据是动态加载的,requests只能获取初始加载的第一页内容,而Selenium可以模拟浏览器的翻页操作,遍历所有页面提取完整数据。以下是实现步骤和完整代码:

实现思路

  • 用Selenium启动浏览器,加载目标页面
  • 提取当前页的表格数据(表头只提取一次)
  • 找到分页栏的「下一页」按钮,点击切换页面
  • 重复提取+翻页,直到「下一页」按钮不可点击(或不存在)
  • 将所有数据保存到CSV文件

完整代码

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 selenium.common.exceptions import NoSuchElementException, ElementClickInterceptedException
import csv

# 初始化Chrome浏览器(需提前下载对应版本的ChromeDriver)
driver = webdriver.Chrome()
url = "https://www.portfoliopersonal.com/Cotizaciones/Cedears"
driver.get(url)

# 存储所有表格数据,先初始化表头
all_table_data = []
wait = WebDriverWait(driver, 10)

try:
    # 等待表格加载完成,提取表头(仅执行一次)
    table = wait.until(EC.presence_of_element_located((By.TAG_NAME, "table")))
    header_row = table.find_element(By.TAG_NAME, "tr")
    headers = [cell.text.strip() for cell in header_row.find_elements(By.TAG_NAME, "th")]
    all_table_data.append(headers)

    while True:
        # 提取当前页的表格数据(跳过已提取的表头行)
        rows = table.find_elements(By.TAG_NAME, "tr")[1:]
        for row in rows:
            row_data = [cell.text.strip() for cell in row.find_elements(By.TAG_NAME, "td")]
            all_table_data.append(row_data)

        # 尝试点击下一页按钮
        try:
            next_button = wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, "a.pagination-next")))
            # 检查按钮是否处于禁用状态
            if "disabled" in next_button.get_attribute("class"):
                break
            next_button.click()
            # 等待页面刷新,表格重新加载
            wait.until(EC.staleness_of(table))
            table = wait.until(EC.presence_of_element_located((By.TAG_NAME, "table")))
        except (NoSuchElementException, ElementClickInterceptedException):
            # 找不到下一页按钮或无法点击,说明已到最后一页
            break

finally:
    # 关闭浏览器
    driver.quit()

# 保存全量数据到CSV
with open('full_output.csv', 'w', newline='', encoding='utf-8') as csvfile:
    csv_writer = csv.writer(csvfile)
    csv_writer.writerows(all_table_data)

print(f"全量表格数据已保存到 'full_output.csv',共{len(all_table_data)-1}条记录")

关键注意事项

  • ChromeDriver配置:需下载与你的Chrome浏览器版本匹配的ChromeDriver,可将其放在Python安装目录,或在初始化时指定路径webdriver.Chrome(executable_path="path/to/chromedriver")
  • 等待机制:使用WebDriverWait替代time.sleep(),确保元素加载完成后再操作,避免页面加载慢导致的错误
  • 分页按钮定位:若目标网站的分页按钮选择器不同,需通过浏览器开发者工具查看实际HTML结构,修改By.CSS_SELECTOR的参数(比如有些网站用#next-page或.next作为选择器)
  • 异常处理:捕获找不到按钮或无法点击的异常,避免程序崩溃,确保正常退出循环

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 11:37:42