无法通过Python从Nordpool网站下载电价表格数据求助
问题原因分析
- 原代码中
pd.read_html('urls')存在语法错误,应传入变量urls而非字符串'urls',但这并非核心问题。 - 该网页的表格内容通过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
相关产品推荐
相关产品推荐

