如何修改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
相关产品推荐
相关产品推荐

