【问题标题】:How do I scrape data from a highcharts graph in python?如何从 python 中的 highcharts 图中抓取数据?
【发布时间】:2022-01-03 17:13:04
【问题描述】:

我正在尝试为一个用于查找医学院统计数据的网站在 python 中编写一个带有 selenium 的网络爬虫。 https://mec.aamc.org/msar-ui/#/medSchoolDetails/102 提供了一个示例。我已经能够成功地抓取大部分数据,但是一些数据,例如录取人口统计数据(您应该能够在没有订阅的情况下查看)是在 highcharts 条形图中。事实证明这非常困难,因为我之前只从静态网站上抓取过数据。

我最初尝试通过 CSS 选择器查找悬停在每个栏上的文本,但是每次访问该站点时,选择器开头的几个字符都会更改,所以我不能那样做。我尝试通过使用通配符代替这些字母的 CSS 选择器查找元素的搜索方法,但我发现的所有内容的解释都太高级了,我无法理解。我也尝试搜索如何从一般的 highcharts 中抓取数据,但我还是无法理解我读到的内容。

非常感谢你们可以提供的任何帮助(如果不可能,请提供解释)。谢谢!

【问题讨论】:

  • 您好,一般Highcharts的工作原理是,图表是通过SVG从数据中绘制出来的,如果您想获取数据,您需要访问负责绘制的脚本中的数据。从 HTML 标记读取数据将很难获得,因为您将获得点的位置,而不是确切的数据。

标签: python selenium web-scraping highcharts


【解决方案1】:

所以“最简单”的方法如下:

元素:

(//*[@class='highcharts-plot-background'])[1]

包含一个名为高度的属性。这个高度是 310。这个元素高度似乎代表了 Y 轴 0-100。所以 310 代表 100。

然后吧。这似乎有点复杂。除了颜色之外,我找不到任何唯一标识符,它不是唯一的。

所以基本上,在 Matriculant Demographics 标题下有一个带有 2 个蓝色图表的图表。

所以你正在寻找这样的东西:

(//*[@class='highcharts-plot-background'])[1]/..//*[@class='highcharts-point highcharts-color-0 ']

将有 2 个元素,所以先选择第一个,然后再选择第二个

这是第一个中的 2 个蓝条。因此,您需要确定哪个是第一个,哪个是第二个。然后,您可以从每个中获取属性高度。

然后您可以通过将第二个高度除以第一个高度来轻松计算该值。在本例中,将 186 除以 310,总计 0.6 - 所以 60。

希望对您有所帮助!我是这样工作的:)

【讨论】:

  • 我得到了这个工作,谢谢!
  • 没问题!你能把我的回答标记为答案吗?谢谢,很高兴我能帮上忙!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-02-16
  • 1970-01-01
  • 2017-08-09
  • 2020-03-19
  • 1970-01-01
  • 1970-01-01
  • 2021-11-18
相关资源
最近更新 更多