【问题标题】:HighCharts scraperHighCharts 刮板
【发布时间】:2025-12-08 18:50:02
【问题描述】:

我正在尝试从 HighCharts 中抓取数据。在 * 上遇到类似问题/问题后,我尝试了多种方法,但我似乎无法在这里破解它。

在这个网址上:https://www.bustabit.com/user/9mins

所以一些解决方案建议使用控制台命令 Highcharts.charts[..]。这在这里行不通。 可以只抓取“highcharts-series-group”。然而结果数据:

M 3.7745098039216 79.5788071428571 L 7.5871459694989 94.70737857142853 L 11.399782135076 48.41395 L.....

这是转换后的数据(数据 -> 转换 -> SVG 坐标?)。所以问题是如何预先转换数据。

另一个* question/answer 设法通过在页面源中的本地 js 文件中查找代码来进行反向转换。我在页面来源中找到了something similar,但由于它的长度很难破译。

我是要在这个文件中找到答案来对数字进行逆向工程,还是有办法以不同的方式获得数据预转换?

【问题讨论】:

  • 看来是故意隐藏了这个数据(Highcharts全局对象被隐藏了)。 Highcharts 支持团队无法帮助您获取这些数据。在这种情况下,最好的选择是联系应用创建者。
  • 嗨,塞巴斯蒂安,感谢您的关注。很奇怪,它被隐藏了,因为所有信息都是公开的,每场比赛!

标签: svg web-scraping highcharts


【解决方案1】:

您可以从浏览器的开发者控制台执行此操作。请注意,使用此数据的任何合法性都取决于您 - 需要针对您要从中提取数据的站点查看数据许可。在浏览器的开发者控制台命令行中输入:

console.log($('#chartDiv').highcharts().series)

然后按回车键。 #chartDiv 是包含图表的 DIV 的 ID。通常,这是带有id="highcharts-information-region-0" 或类似名称的DIV 上方的那个。这将吐出图表中显示的所有系列。在返回的每个系列对象中,都有一个名为 data 的属性,这就是您所追求的。

【讨论】:

  • 这并没有真正的帮助。无法以这种方式访问​​数据。我在问题中也已经提到过,您不能简单地获取数据。 highcharts-series-group 部分中有一些数据,但这已被转换,不是我想要的。
  • @Lud,我不确定你在找什么。上面的命令将为您提供未转换的数据 - 它实际上是用于构建图形的数据并且未转换。我无法让该页面加载图表,因为我没有权限。
  • 感谢您尝试提供帮助,但如果您无法测试您的解决方案?没有数据属性。正如我上面提到的,有一个 d 属性,但它只包含 SVG 坐标而不是真实数据。
  • @Lud,你可以尝试运行该代码 sn-p 吗?将 chartDiv 文本更改为包含要从中提取数据的图表的 DIV ID。我的代码不会吐出 SVG 形状 - 它会为您指定的图表返回系列和每个系列中的数据。
  • 它不起作用。所以基本上带有chartDiv的div有一个带有class=“highcharts-root”的子,它包含很多(x轴y轴等)和一个带有highcharts-series的 -团体课。然后这个包含转换后的数据在一个 类:highcharts-series highcharts-series-0 highcharts-line-series highcharts-color-0
【解决方案2】:

最终没有办法通过一些隐藏的方法或文件或脚本来获取纯数据。但是我确实注意到工具提示中显示了足够的信息。如果您将鼠标悬停在图表上,它会为每个数据点生成一个工具提示,为您提供净累积利润和下注等。

我所做的是使用 Selenium 在图表上查找 y 轴标签。然后使用 move_to_element 和水平 move_by_offset 将鼠标悬停在图表上并生成工具提示。我只是做了一些猜测,发现使用偏移量 7 跳跃会一次性生成所有工具提示,而不会出现双打或丢失任何提示。该网站还刷新了图表,因此我捕获了异常以重置所有内容并再次继续。然后在 107 个数据点之后,点击上一页并重新启动!

【讨论】: