将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