我正在尝试从 highchart 中抓取数据。我查看了类似的问题,但不了解 script_execute 的工作原理或如何使用浏览器检测 js。这是我当前的代码:
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
# Core settings
chrome_path = r"C:\Users\X\Y\chromedriver_win32\chromedriver.exe"
driver = webdriver.Chrome(chrome_path)
driver.implicitly_wait(15)
stats_url = 'https://addons.mozilla.org/en-US/firefox/addon/adblock-plus/statistics/'
driver.get(stats_url)
driver.find_element_by_link_text('by Source').click()
driver.find_element_by_id('custom-date-range').click()
year = driver.find_element_by_id('date-range-start')
year.click()
for i in range(5): # goes back 5 years
year.send_keys(Keys.ARROW_DOWN)
driver.find_element_by_id('date-range-submit').click()
我想从图表中抓取“下载”数据(虽然不仅仅是这个页面,还有很多页面)。当我使用自定义搜索选项时,网站自动生成的 csv 文件不会更新。所以唯一的办法就是从图中抓取数据。我该怎么做?
最佳答案
Mozilla 提供了一个简单的 REST API 来获取统计信息,因此您无需使用 Selenium。
使用 requests
模块:
url = "https://addons.mozilla.org/en-US/firefox/addon/adblock-plus/statistics/downloads-day-20170823-20171023.json"
data = requests.get(url).json()
要选择范围,只需更新 URL 中的日期。
但是如果你还是愿意用selenium来废弃图表:
dates = driver.execute_script("return Highcharts.charts[0].series[0].xData");
users = driver.execute_script("return Highcharts.charts[0].series[0].yData");
downloads = driver.execute_script("return Highcharts.charts[0].series[1].yData");
关于python - 使用 selenium 从 Highcharts 抓取数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46852584/