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

使用BeautifulSoup提取Nordpool网站表格并转Pandas DataFrame遇阻求助

问题原因与解决方法

原因说明

  • 目标网站的表格是动态渲染的:页面初始HTML里的table只是一个空占位符,实际表格数据是通过前端JavaScript调用后端API获取后,再填充到页面中的。requests.get()只能获取到页面的初始静态HTML,拿不到JS加载后的动态内容,所以只能看到空的table标签。
  • 之前的代码在其他网站生效,是因为那些网站的表格是静态嵌入在HTML里的,请求页面时就能直接拿到完整表格内容。

解决建议

方法1:直接调用后端API(推荐,效率更高)

网站的动态数据都是通过API接口返回的,你可以直接请求这些接口获取原始数据,无需解析HTML:

  1. 打开浏览器开发者工具(按F12),切换到「Network」标签页;
  2. 刷新目标页面,筛选「XHR」或「Fetch」类型的请求;
  3. 找到返回表格数据的请求,复制其URL(比如Nordpool的市场数据接口通常类似https://www.nordpoolgroup.com/api/marketdata/page/10?currency=,,,EUR);
  4. 用requests请求该API,解析返回的JSON数据并转为DataFrame。

示例代码:

import pandas as pd
import requests

# 替换为你抓包得到的实际API地址
api_url = "https://www.nordpoolgroup.com/api/marketdata/page/10?currency=,,,EUR"
response = requests.get(api_url)
response.raise_for_status()  # 检查请求是否成功
data = response.json()

# 解析JSON结构,提取表格数据(根据实际返回结构调整)
table_rows = data["data"]["Rows"]
df = pd.DataFrame(table_rows)
print(df.head())

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

如果不想抓API,可以用Selenium模拟浏览器完整加载页面(包括JS执行),再提取表格:

  1. 安装依赖:pip install selenium;
  2. 下载对应浏览器的驱动(比如ChromeDriver),并确保其在系统PATH中;
  3. 编写代码等待表格加载完成后提取内容。

示例代码:

from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
import pandas as pd

url = "https://www.nordpoolgroup.com/en/Market-data1/#/nordic/table"

# 初始化Chrome浏览器
driver = webdriver.Chrome()
driver.get(url)

# 等待表格加载完成(最多等待10秒)
wait = WebDriverWait(driver, 10)
table_element = wait.until(EC.presence_of_element_located((By.TAG_NAME, "table")))

# 提取表格HTML并转为DataFrame
table_html = table_element.get_attribute("outerHTML")
df = pd.read_html(table_html)[0]
print(df.head())

# 关闭浏览器
driver.quit()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 05:20:24