使用Selenium爬取EEX网站不同日期电力期货数据遇阻求助
解决EEX网站日期下拉组件的数据选择问题
你的核心问题是未处理左侧的日期筛选组件,这个组件是自定义下拉菜单而非原生<select>,需要用Selenium模拟点击展开+选择的操作,以下是修改后的完整代码:
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 pandas as pd driver = webdriver.Chrome() driver.get(url='https://www.eex.com/en/market-data/power/futures') # 处理Cookie弹窗 WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "input[value='I accept all cookies.']"))).click() # 选择产品:EEX German Power Futures WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "button.btn.dropdown-toggle.form.input-select div.filter-option-inner"))).click() WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//div[@class='dropdown-menu show']//li/a[@class='dropdown-item']/span[contains(., 'EEX German Power Futures')]"))).click() # -------------------------- 新增日期选择逻辑 -------------------------- # 点击左侧日期下拉按钮,展开日期列表 date_dropdown_btn = WebDriverWait(driver, 20).until( EC.element_to_be_clickable((By.CSS_SELECTOR, "div#dateRangeDropdown button.dropdown-toggle")) ) date_dropdown_btn.click() # 选择目标日期(示例:选择"2024-05-20",可替换为你需要的日期文本) target_date = "2024-05-20" date_option = WebDriverWait(driver, 20).until( EC.element_to_be_clickable((By.XPATH, f"//div[@class='dropdown-menu show']//li/a[@class='dropdown-item']/span[text()='{target_date}']")) ) date_option.click() # 等待表格数据刷新(关键:日期切换后数据会重新加载,必须等加载完成) WebDriverWait(driver, 20).until( EC.staleness_of(driver.find_element(By.CSS_SELECTOR, "div#baseloadwidget_pfpde > table.mv-quote")) ) # 重新获取刷新后的表格 table_data = WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.CSS_SELECTOR, "div#baseloadwidget_pfpde > table.mv-quote"))).get_attribute("outerHTML") # ---------------------------------------------------------------------- df_list = pd.read_html(table_data) if len(df_list) > 0: df = df_list[0] print(df) else: print("No data found on the table.") driver.quit()
关键说明:
- 日期下拉按钮用
div#dateRangeDropdown button.dropdown-toggle定位,对应页面左侧的日期筛选触发按钮 - 选择日期时使用精确匹配文本的XPATH,只需将
target_date变量替换为下拉菜单中存在的日期格式(如"2024-05-20") - 通过
staleness_of等待旧表格失效,确保新数据加载完成后再抓取,避免获取旧数据
若需批量获取多个日期数据,可将目标日期存入列表,循环执行日期选择+数据抓取逻辑即可。
内容的提问来源于stack exchange,提问作者Nikolina9113
相关产品推荐
相关产品推荐

