2017-08-03 51 views
0

我甚至不知道这是否可行,但我希望有一种方法可以通过Python自动收集JavaScript对象中保存的数据。举例来说,我试图从http://cryptocurrencychart.com/top/10访问图表数据。如何以编程方式通过Python访问网站中的JavaScript变量

我认为这样做是通过requests模块,只是寻找保存数据的SVG元素,如dom.select('.c3-chart-lines .c3-chart-line .c3-shapes-Bitcoin circle'),其中dom是到BeautifulSoup调用生成的对象,然后用最简单的方法.get('cy')获取值。但是,如果将cy属性的值与图表上的实际值进行比较,则它们不会对齐。

但是,我意识到我可以打开开发者控制台并通过console.log(CryptoCurrencyChart.chart.data());访问数据。为了将这些数据保存到文本文件中,我必须在网页上创建一个链接,以base-64编码数据作为href,然后手动单击该链接。

我的问题是,这是否可以通过像Python这样的程序来完成,这样我就可以将它自动化以便将来获取数据。

回答

1

您可以用Selenium来获得CryptoCurrencyChart.chart.data()对象

#!/usr/bin/env python 

from selenium import webdriver 

link = 'http://cryptocurrencychart.com/top/10' 

class Scraper(object): 
    def __init__(self): 
     options = webdriver.ChromeOptions() 
     options.add_argument('headless') 
     options.binary_location = '/usr/bin/google-chrome-unstable' 
     options.add_argument('window-size=1200x600') 
     self.driver = webdriver.Chrome(chrome_options=options) 

    def scrape(self): 
     self.driver.get(link) 
     result = self.driver.execute_script('return CryptoCurrencyChart.chart.data()') 
     self.driver.quit() 
     return result 

if __name__ == '__main__': 
    scraper = Scraper() 
    scraper.scrape() 

运行self.driver.execute_script('return CryptoCurrencyChart.chart.data()')会给你3个阵列,每个360元。