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

使用Beautiful Soup/Selenium爬取ERCOT网站reportTable数据遇空表体问题

解决ERCOT网站reportTable表体数据爬取为空的问题

方法1:优化Selenium等待逻辑

直接调用page_source时,页面可能还未完成表格数据的动态渲染,需等待表格内容加载完成后再获取源码:

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 bs4 import BeautifulSoup

url = 'https://www.ercot.com/mp/data-products/data-product-details?id=NP3-233-CD'
chrome = webdriver.Chrome()
chrome.get(url)

# 等待表格数据行加载,最多等待10秒
wait = WebDriverWait(chrome, 10)
wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, '#reportTable tbody tr')))

# 此时再获取完整渲染后的页面源码
data = chrome.page_source
soup = BeautifulSoup(data, "html.parser")
report_table = soup.find(id='reportTable')

# 提取表体数据示例
tbody = report_table.find('tbody')
for row in tbody.find_all('tr'):
    cols = [col.get_text(strip=True) for col in row.find_all('td')]
    print(cols)

chrome.quit()

方法2:直接抓取数据接口(推荐)

动态渲染的表格数据通常来自后端API请求,直接调用接口无需模拟浏览器,效率更高:

  1. 打开浏览器开发者工具(F12),切换到网络标签
  2. 刷新页面,筛选XHR/Fetch请求,找到返回表格数据的接口(通常含report、data等关键词)
  3. 复制接口的URL、请求头和参数,用requests库直接请求:

示例代码(需替换为实际找到的接口信息):

import requests

headers = {
    'User-Agent': 'Mozilla/5.0',
    # 从浏览器请求中复制必要的请求头,如Referer、Cookie等
}

params = {
    'id': 'NP3-233-CD',
    # 添加接口所需的其他参数,如时间范围等
}

response = requests.get('https://www.ercot.com/api/report/data', headers=headers, params=params)
data = response.json()

# 解析JSON数据提取表格内容
for item in data['rows']:
    print(item)

额外注意事项

  • ERCOT网站仅允许美国IP访问,需确保爬虫环境使用美国地区代理IP
  • 部分接口需携带Cookie或验证信息,需从浏览器请求中完整复制请求头
  • 遵守网站使用条款,避免频繁请求导致IP被封禁

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 17:10:33