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

无法通过Python从Nordpool网站下载电价表格数据求助

问题原因分析
  1. 原代码中pd.read_html('urls')存在语法错误,应传入变量urls而非字符串'urls',但这并非核心问题。
  2. 该网页的表格内容通过JavaScript动态渲染,直接用requests获取的静态HTML中不包含实际表格数据,因此pd.read_html和BeautifulSoup无法提取到目标内容。

解决方案

方案1:调用官方API(推荐,高效无需浏览器)

Nordpool的市场数据通过公开API接口提供,直接调用可获取结构化JSON数据,效率远高于模拟浏览器。

代码示例

import requests
import pandas as pd

# 替换为你需要的日期范围,格式为YYYY-MM-DD
start_date = "2024-05-19"
end_date = "2024-05-20"

# 构造API请求URL
api_url = f"https://www.nordpoolgroup.com/api/marketdata/page/10?currency=,,,EUR&endDate={end_date}&startDate={start_date}"

# 添加请求头模拟浏览器,避免被拦截
headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36"
}
response = requests.get(api_url, headers=headers)
data = response.json()

# 解析JSON数据并整理成DataFrame
table_data = data['data']['table']
rows = []
for hour_item in table_data['rows']:
    hour = hour_item['name']
    for area_item in hour_item['columns']:
        rows.append({
            "Hour": hour,
            "Area": area_item['name'],
            "Price (EUR/MWh)": area_item['value']
        })

df = pd.DataFrame(rows)
df.to_csv("nordpool_hourly_prices.csv", index=False)
print(df.head())

方案2:使用Selenium模拟浏览器加载动态内容

如果无法定位API接口,可通过Selenium模拟浏览器打开页面,等待JavaScript渲染完成后提取表格。

代码示例

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

# 初始化Chrome浏览器(需提前安装对应版本的ChromeDriver并配置路径)
driver = webdriver.Chrome()
target_url = "https://www.nordpoolgroup.com/en/Market-data1/Dayahead/Area-Prices/ALL1/Hourly12/?view=table"
driver.get(target_url)

# 等待表格加载完成(最长等待10秒)
wait = WebDriverWait(driver, 10)
table_container = wait.until(EC.presence_of_element_located((By.CLASS_NAME, "table-responsive")))

# 提取表格数据
df_list = pd.read_html(table_container.get_attribute('outerHTML'))
df = df_list[0]

# 保存为CSV文件
df.to_csv("nordpool_hourly_prices.csv", index=False)
print(df.head())

# 关闭浏览器
driver.quit()

注意事项

  • 使用Selenium时,需确保浏览器驱动版本与本地浏览器版本完全匹配,否则会出现启动失败的错误。
  • 两种方案均可根据需求调整日期范围或输出格式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 00:45:35