Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/389.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何通过Python以编程方式访问网站中的JavaScript变量_Javascript_Python - Fatal编程技术网

如何通过Python以编程方式访问网站中的JavaScript变量

如何通过Python以编程方式访问网站中的JavaScript变量,javascript,python,Javascript,Python,我甚至不知道这是否可行,但我希望有一种方法可以通过Python自动收集JavaScript对象中保存的数据。作为一个例子,我试图从中访问图表数据 我认为最简单的方法是通过请求模块,只需查找保存数据的SVG元素,例如dom。选择('.c3 chart line.c3 chart line.c3 shapes Bitcoin circle'),其中dom是调用BeautifulSoup得到的对象,然后使用.get>('cy')获取值。但是,如果将cy属性的值与图表上的实际值进行比较,则它们不会对齐

我甚至不知道这是否可行,但我希望有一种方法可以通过Python自动收集JavaScript对象中保存的数据。作为一个例子,我试图从中访问图表数据

我认为最简单的方法是通过
请求
模块,只需查找保存数据的SVG元素,例如
dom。选择('.c3 chart line.c3 chart line.c3 shapes Bitcoin circle')
,其中
dom
是调用
BeautifulSoup
得到的对象,然后使用
.get>('cy')
获取值。但是,如果将
cy
属性的值与图表上的实际值进行比较,则它们不会对齐

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


我的问题是,这是否可以通过Python之类的编程实现,这样我就可以为将来的数据采集自动化。

您可以使用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_脚本('return CryptoCurrencyChart.chart.data()')
将为您提供3个数组,每个数组包含360个元素