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

求助:用Python(Selenium)抓取RSPO CREDITS Highcharts数据至DataFrame

提取RSPO CREDITS Highcharts数据到Pandas DataFrame

核心思路

Highcharts 图表的数据会直接暴露在页面的全局 JavaScript 对象中,无需定位DOM元素提取,直接用Selenium执行JS代码就能拿到原始数据,效率更高。

实现步骤&代码示例

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

# 初始化Chrome浏览器(需提前配置好ChromeDriver)
driver = webdriver.Chrome()
driver.get("https://rspo.org/palmtrace")

# 等待图表加载完成(以页面中存在Highcharts容器为判断条件)
WebDriverWait(driver, 20).until(
    EC.presence_of_element_located((By.CLASS_NAME, "highcharts-container"))
)

# 执行JS获取页面所有Highcharts实例
charts = driver.execute_script("return window.Highcharts.charts;")

# 初始化存储数据的列表
data_records = []

# 遍历每个图表实例
for chart in charts:
    # 跳过空实例
    if not chart:
        continue
    
    # 获取图表标题,筛选出RSPO CREDITS相关图表
    chart_title = chart.get('title').get('textStr')
    if not chart_title or "RSPO CREDITS" not in chart_title:
        continue
    
    # 获取x轴的年月分类数据
    x_categories = chart.get('xAxis')[0].get('categories')
    # 获取图表中的系列(信用数量、美元价格)
    series_data = chart.get('series')
    
    # 遍历每个指标系列
    for series in series_data:
        series_name = series.get('name')
        # 只处理目标指标
        if series_name not in ["Credit Quantity", "USD Price"]:
            continue
        
        # 匹配每个数据点的年月和数值
        for idx, point in enumerate(series.get('data')):
            year, month = x_categories[idx].split('-')
            data_records.append({
                "图表名称": chart_title,
                "年份": year,
                "月份": month,
                "指标类型": series_name,
                "数值": point.get('y')
            })

# 转换为Pandas DataFrame
df = pd.DataFrame(data_records)
# 统一数值类型,空值转为NaN
df['数值'] = pd.to_numeric(df['数值'], errors='coerce')

# 关闭浏览器
driver.quit()

# 查看结果示例
print(df.head())

关键细节说明

  • 获取Highcharts实例:window.Highcharts.charts是Highcharts的全局变量,直接存储了页面所有图表的实例对象,通过Selenium执行JS即可直接获取。
  • 筛选目标图表:通过标题包含"RSPO CREDITS"过滤,避免处理页面上的无关图表。
  • 年月解析:x轴分类直接是YYYY-MM格式,拆分即可得到年份和月份,无需额外处理时间戳。
  • 数据匹配:每个系列的索引与x轴分类索引一一对应,确保年月和数值精准匹配。

常见问题处理

  • 若页面加载过慢,可延长WebDriverWait的超时时间(比如调整为30秒)。
  • 若x轴格式发生变化,需对应调整年月拆分的逻辑。
  • 若存在空数据点,pd.to_numeric的errors='coerce'参数会将其转为NaN,方便后续数据清洗。

内容的提问来源于stack exchange,提问作者Funkeh-Monkeh

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 08:11:39