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

如何有效抓取CoinDesk XBX页面的Highcharts图表数据?

CoinDesk XBX 指数Highcharts数据抓取可行方案

常规公开教程里提到的「查看页面源码找Highcharts初始化参数」「读取全局Highcharts.charts数组」的方法在这个站点完全不适用,核心原因是站点基于React框架做客户端渲染,Highcharts实例没有挂载到全局对象,数据也没有预渲染到静态HTML中,以下是两种可直接落地的实现路径:

方案一:网络请求拦截定位原生数据源(最适合批量采集)

  • 打开目标页面后启动浏览器开发者工具,切换到「网络」面板,筛选请求类型为Fetch/XHR,清空面板内已有请求记录
  • 手动点击图表上方的时间范围切换按钮(1D/7D/30D/1Y/全部),观察面板中新触发的请求
  • 筛选路径包含xbx、historical、quote关键词的请求,这类请求的响应体就是Highcharts渲染用的原始数据,结构为[时间戳, 指数数值]的标准二维数组,无加密、无签名校验
  • 编写采集脚本时,只需要在请求头中携带正常浏览器的User-Agent以及对应页面的Referer参数,即可直接请求接口拿到数据,不需要登录态,也没有复杂的反爬校验

方案二:从DOM绑定的实例内存直接读取已渲染数据(零分析成本)

如果不想花时间梳理接口逻辑,可以直接在页面控制台执行代码,从React组件挂载的属性中拿到Highcharts实例,直接导出已加载的全量数据,代码如下:

// 定位Highcharts渲染的容器节点
const chartContainer = document.querySelector('.highcharts-container');
// 遍历DOM节点挂载的内部属性,找到Highcharts配置对象
const highchartsConfig = Object.values(chartContainer)
  .find(prop => prop?.memoizedProps?.options?.series)
  ?.memoizedProps?.options;
// 格式化提取所有序列的结构化数据
const exportData = highchartsConfig.series.map(seriesItem => ({
  indicatorName: seriesItem.name,
  dataPoints: seriesItem.data.map(point => [
    new Date(point.x).toISOString(),
    point.y
  ])
}));
// 输出结果可直接复制使用
console.table(exportData);

执行代码后控制台会直接打印结构化的指数数据,切换图表时间范围、指标选项后重新执行代码,即可拿到对应维度下的全量数据。

注意事项

  • 不要尝试解析静态页面源码获取数据,所有图表数据都是页面加载完成后动态拉取注入的,静态HTML中不存在有效数据
  • 不要通过解析图表SVG/Canvas上的文本内容提取数值,不仅效率极低,还会存在数值精度损失
  • 接口返回的时间戳为UTC标准时区,本地使用时注意按需转换时区偏移

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 22:09:19