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

如何修改Python代码抓取带选项值按钮的网页表格前50行?

修改代码以抓取前50行表格数据的方案

关键问题修正与代码优化

你的现有代码存在几个核心问题:循环内重复启动浏览器、错误用Select类处理普通按钮、未实际触发行数切换操作,以及未正确提取DataFrame。以下是修正后的完整代码:

import pandas as pd
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

test = {}
dict_scr = {}

# 提前初始化浏览器,避免循环内重复启动
options = webdriver.FirefoxOptions()
options.binary_location = r'C:/Users/Mozilla Firefox/firefox.exe'
driver = webdriver.Firefox(executable_path='C:/Users/geckodriver.exe', options=options)

try:
    for ii in range(0, 12):
        url = link_scr['Links'][ii]
        driver.get(url)
        
        # 定位并点击"50"按钮切换每页显示行数
        show_50_btn = WebDriverWait(driver, 20).until(
            EC.element_to_be_clickable((By.XPATH, "//button[contains(text(), '50')]"))
        )
        show_50_btn.click()
        
        # 等待表格重新加载完成,确保数据更新
        table = WebDriverWait(driver, 20).until(
            EC.presence_of_element_located((By.CSS_SELECTOR, "table#current_holdings_table"))
        )
        
        # 读取HTML表格并提取DataFrame
        df_list = pd.read_html(table.get_attribute("outerHTML"))
        df = df_list[0]
        # 强制保留前50行,避免页面加载异常
        df = df.head(50)
        
        test[link_scr.index[ii]] = table.get_attribute("outerHTML")
        dict_scr[link_scr.index[ii]] = df
        print(f"已获取{link_scr.index[ii]}的前50行数据")
finally:
    # 确保浏览器最终关闭,避免资源泄漏
    driver.quit()

核心修改说明

  • 复用浏览器实例:将浏览器初始化移到循环外,避免反复启动关闭,提升运行效率同时降低反爬风险
  • 正确触发行数切换:移除错误的Select用法,直接定位并点击"50"按钮,完成每页行数切换
  • 保证数据有效性:点击按钮后等待表格重新加载,确保抓取到的是切换后的50行数据
  • 规范DataFrame处理:从pd.read_html返回的列表中提取目标DataFrame,并用head(50)强制保留前50行
  • 资源安全处理:通过try-finally确保无论执行结果如何,浏览器都会被正常关闭

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 10:54:18