Converting svg from Highcharts data into data points

后端 未结 2 1713
执笔经年
执笔经年 2021-02-03 15:04

I am looking to scrape data from this site\'s mma data and parsing a few highcharts tables. I am clicking a link with selenium and then switching to the chart. I go to this s

相关标签:
2条回答
  • 2021-02-03 15:46

    When I use the CSS selector "g.highcharts-axis-labels tspan" it returns all the fighter's names and when I use "g.highcharts-data-labels tspan" it returns all the percents for line movement.

    So you should be able to use something like

    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] + ")")
    

    An alternative is to use the command that Pawel Fus recommended,

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

    You should be able to execute that using JSE and it returns an array of arrays. You can then parse through that and get the data you want. It's up to you...

    0 讨论(0)
  • 2021-02-03 15:49

    I could not figure out how to convert SVG data into what is displayed on the graph you mentioned, but wrote the following Selenium Python script:

    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)
    

    Here we are using Highcharts API and some js from the page sources, that converts server response for this chart to what we see on a graph.

    0 讨论(0)
提交回复
热议问题