Python动态网站表格爬取问题:CME Group期权日历数据提取遇SSL错误
解决CME Group期权日历页面爬取的SSL问题与动态数据提取
1. 修复SSL握手错误
你的SSL握手错误源于ChromeDriver默认安全策略与目标网站SSL配置不兼容,给ChromeDriver添加以下启动参数即可解决:
--ignore-certificate-errors:忽略证书验证错误--ignore-ssl-errors:忽略SSL层级错误--disable-web-security:禁用跨域安全限制(部分场景需启用)--allow-running-insecure-content:允许加载非安全资源
2. 动态页面交互与数据提取
该页面为动态渲染,需模拟用户操作选择产品、切换月份后,等待表格加载完成再提取数据。核心步骤:
- 初始化配置好参数的ChromeDriver
- 等待页面元素加载,选择目标产品(示例选S&P 500 E-mini期权)
- 切换到「所有月份」选项
- 等待表格渲染完成后提取HTML
3. 导出数据到CSV
使用pandas可快速将HTML表格转为DataFrame并导出为CSV,无需手动解析表格结构。
完整代码
from selenium import webdriver from selenium.webdriver.chrome.options import Options 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 # 配置ChromeOptions解决SSL问题 chrome_options = Options() chrome_options.add_argument("--ignore-certificate-errors") chrome_options.add_argument("--ignore-ssl-errors") chrome_options.add_argument("--disable-web-security") chrome_options.add_argument("--allow-running-insecure-content") # 初始化Driver与等待器 driver = webdriver.Chrome(options=chrome_options) wait = WebDriverWait(driver, 20) # 20秒超时,可根据网络调整 try: # 打开目标页面 url = 'https://www.cmegroup.com/tools-information/quikstrike/options-calendar.html' driver.get(url) # 选择示例产品(S&P 500 E-mini期权),可替换为其他产品的XPath product_dropdown = wait.until(EC.element_to_be_clickable((By.ID, "productDropdown"))) product_dropdown.click() target_product = wait.until(EC.element_to_be_clickable((By.XPATH, "//li[contains(text(), 'S&P 500 E-mini')]"))) target_product.click() # 切换到「所有月份」选项 month_dropdown = wait.until(EC.element_to_be_clickable((By.ID, "monthDropdown"))) month_dropdown.click() all_months_option = wait.until(EC.element_to_be_clickable((By.XPATH, "//li[text()='All Months']"))) all_months_option.click() # 等待表格加载完成 table = wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, "table.qstk-options-calendar"))) # 读取表格数据并导出CSV df = pd.read_html(table.get_attribute('outerHTML'))[0] df.to_csv('cme_options_calendar.csv', index=False) print("数据已成功导出到cme_options_calendar.csv") finally: # 确保Driver关闭 driver.quit()
注意事项
- 若目标产品的XPath不匹配,可通过浏览器开发者工具查看元素文本/属性,替换对应XPath
- 超时时间可根据网络速度调整,避免因加载缓慢导致报错
- 需提前安装依赖:
pip install selenium pandas
内容的提问来源于stack exchange,提问作者DMX
相关产品推荐
相关产品推荐

