将svg从Highcharts数据转换为数据点

我正在寻找从本网站的mma数据中提取数据并解析一些highcharts表格。 我点击了一个有硒的链接,然后切换到图表。 我去了这个网站,点击Artem Lobov排中的+420获得Pinnacle专栏。 这会创建一个弹出式图表。 然后我切换到活动元素。 我想要捕获高点图绘制的图表以响应点击。

我以如下方式使用硒:

actions = ActionChains(driver)
actions.move_to_element(driver.find_element_by_id(pin_id))
actions.click()
actions.perform()
time.sleep(3)
driver.switch_to_active_element()

我能够点击链接并获得图表,但我对高图的工作方式有点遗憾。
我正试图在这里解析highcharts-series-group并获取图表中的值。

我相信这些数据可以通过以下方式找到:

soup = bs4.BeautifulSoup(open(driver.page_source), "lxml")
data = soup.find_all('g', {"class":"highcharts-series-group"})[-1].find_all("path")

但是,这提供了以下内容,并且不清楚如何从数据创建图表。 正如评论中指出的那样,它似乎是svg。

在检查过程中,数据似乎在<g class="highcharts-series"<g class="highcharts-series-tracker但其数据并不清晰。

highcharts如何显示保存的数据的图形? 有没有一种干净的方式来显示highcharts-series-group中的数据?


我无法弄清楚如何将SVG数据转换为您提到的图表上显示的内容,但是编写了以下的Selenium Python脚本:

from selenium import webdriver
import time

driver = webdriver.Chrome()
driver.get('https://www.bestfightodds.com/events/ufc-fight-night-108-swanson-vs-lobov-1258')
actions = webdriver.ActionChains(driver)
actions.move_to_element(driver.find_element_by_id('oID1013467091'))
actions.click()
actions.perform()
time.sleep(3)
driver.switch_to_active_element()
chart_number = driver.find_element_by_id('chart-area').get_attribute('data-highcharts-chart')
chart_data = driver.execute_script('return Highcharts.charts[' + chart_number + '].series[0].options.data')
for point in chart_data:
    e = driver.execute_script('return oneDecToML('+ str(point.get('y')) + ')')
    print(point.get('x'), e)

在这里,我们使用Highcharts API和页面源代码中的一些js,将图表的服务器响应转换为我们在图形上看到的。


当我使用CSS选择器"g.highcharts-axis-labels tspan"它返回所有战士的名字,当我使用"g.highcharts-data-labels tspan"它返回线移动的所有百分比。

所以你应该可以使用类似的东西

labels = driver.find_elements_by_css_selector("g.highcharts-axis-labels tspan")
data = driver.find_elements_by_css_selector("g.highcharts-data-labels tspan")
for i in range(0, len(labels) - 1)
    print("Fighter: " + labels[i] + " (" + data[i] + ")")

另一种方法是使用Pawel Fus推荐的命令,

Highcharts.charts[0].series[0].options.data

你应该能够使用JSE执行它,并返回一个数组数组。 然后,您可以通过解析并获取所需的数据。 随你便...

链接地址: http://www.djcxy.com/p/88737.html

上一篇: Converting svg from Highcharts data into data points

下一篇: Highcharts svg element "highcharts