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

如何用Python(Databricks环境)爬取Highcharts图表数据?

解决方案:爬取Macromicro网站Highcharts数据

核心问题分析

Highcharts的图表数据是动态生成的,静态HTML里不会直接包含Highcharts.charts对象,需要通过以下几种方式获取:


方法1:直接提取页面中的全局数据变量

很多网站会把图表数据预存在页面的<script>标签里,而非通过JS动态计算。步骤如下:

  1. 用requests获取页面源码
  2. 用正则匹配包含图表数据的全局变量(比如搜索series、data相关的结构)

示例代码:

import requests
import re
import json

url = "https://en.macromicro.me/collections/4356/freight/44756/drewry-world-container-index"
headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36"
}

response = requests.get(url, headers=headers)
# 匹配包含Highcharts数据的脚本内容,根据实际页面调整正则
pattern = re.compile(r'Highcharts\.charts\[0\]\.series = (.*?);', re.DOTALL)
match = pattern.search(response.text)

if match:
    series_data = json.loads(match.group(1))
    # 提取每个series的key和y字段
    result = []
    for series in series_data[:9]:  # 取series[0]到series[8]
        for item in series.get("data", []):
            result.append({
                "key": item.get("key"),
                "y": item.get("y")
            })
    print(result[:5])  # 打印前5条验证
else:
    print("未找到目标数据变量")

方法2:用Selenium动态渲染页面(Databricks适配)

如果数据是完全动态生成的,需要模拟浏览器执行JS:

  1. 先在Databricks安装依赖:
%pip install selenium webdriver-manager
  1. 编写Selenium代码:
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from webdriver_manager.chrome import ChromeDriverManager
import json

chrome_options = Options()
chrome_options.add_argument("--headless")  # 无头模式适配Databricks环境
chrome_options.add_argument("--no-sandbox")
chrome_options.add_argument("--disable-dev-shm-usage")

driver = webdriver.Chrome(ChromeDriverManager().install(), options=chrome_options)
driver.get("https://en.macromicro.me/collections/4356/freight/44756/drewry-world-container-index")

# 执行JS获取Highcharts数据
script = """
var result = [];
for(var i=0; i<9; i++){
    var series = Highcharts.charts[0].series[i];
    series.data.forEach(item => {
        result.push({key: item.key, y: item.y});
    });
}
return result;
"""
data = driver.execute_script(script)
print(data[:5])

driver.quit()

方法3:抓包获取原始API接口(最高效)

  1. 打开浏览器开发者工具(F12)→ Network → XHR
  2. 刷新页面,寻找返回图表数据的接口(通常是.json或不带后缀的API路径)
  3. 直接请求该接口获取结构化数据,无需处理HTML或JS

示例(假设接口为实际抓包得到的地址,需自行确认):

import requests

api_url = "实际抓包得到的API地址"
headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36",
    "Referer": "https://en.macromicro.me/collections/4356/freight/44756/drewry-world-container-index"
}

response = requests.get(api_url, headers=headers)
data = response.json()
# 提取所需的key和y字段(根据接口返回结构调整)

注意事项

  • 必须添加User-Agent等请求头,避免被网站拦截
  • Databricks环境中使用Selenium需确保集群有足够权限运行Chrome
  • 若遇到反爬,可尝试添加Cookies(从浏览器复制)或使用代理

内容的提问来源于stack exchange,提问作者Boris Rendón

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 11:25:32