Python 如何从HTML动态图中提取元素?

Python 如何从HTML动态图中提取元素?,python,html,beautifulsoup,python-requests,dygraphs,Python,Html,Beautifulsoup,Python Requests,Dygraphs,抱歉,如果这是一个愚蠢的问题,但我真的不太了解HTML。我正在尝试使用BeautifulSoup和Python中的请求从该网站获取所有数据点。到目前为止,我有以下代码: session = requests.Session() page = session.get(https://bitinfocharts.com/comparison/bitcoin-transactions.html) soup = BeautifulSoup(page.content, 'html.parser') val

抱歉,如果这是一个愚蠢的问题,但我真的不太了解HTML。我正在尝试使用BeautifulSoup和Python中的请求从该网站获取所有数据点。到目前为止,我有以下代码:

session = requests.Session()
page = session.get(https://bitinfocharts.com/comparison/bitcoin-transactions.html)
soup = BeautifulSoup(page.content, 'html.parser')
values = soup.find_all('script')[4]
这将返回所有数据点所在的html代码部分,但数据点是动态图的一部分,我不知道如何获取它们。我也试过了

values = soup.find_all('script')[4].get_text()
但这根本没有回报

d = new Dygraph(document.getElementById("container"),[[new Date("2009/01/03"),null],[new Date("2009/01/04"),null],
[new Date("2009/01/05"),null],[new Date("2009/01/06"),null],[new Date("2009/01/07"),null],
[new Date("2009/01/08"),null],[new Date("2009/01/09"),null],[new Date("2009/01/10"),null],
[new Date("2009/01/11"),null],[new Date("2009/01/12"),7]........etc

在网站代码中,数据看起来是这样的,但我不知道这意味着什么以及如何获得这些数据。我不知道数据集开头和结尾的双括号代表什么。欢迎提供任何帮助。

不理解问题

导入请求
从bs4导入BeautifulSoup
数据=dict()
会话=请求。会话()
page=session.get('https://bitinfocharts.com/comparison/bitcoin-transactions.html')
soup=BeautifulSoup(page.content,'html.parser')
values=str(soup.find_all('script')[4])
values=values.split('d=new Dygraph(document.getElementById(“容器”),'))[1]。split(',{labels:')[0]
对于范围内的i(values.count('new Date')):
日期=值。拆分('新日期('')[i+1]。拆分('''')[0]
value=values.split(“”)[i+1]。split(“]”)[0]
打印(日期、值)

这?

不理解问题所在

导入请求
从bs4导入BeautifulSoup
数据=dict()
会话=请求。会话()
page=session.get('https://bitinfocharts.com/comparison/bitcoin-transactions.html')
soup=BeautifulSoup(page.content,'html.parser')
values=str(soup.find_all('script')[4])
values=values.split('d=new Dygraph(document.getElementById(“容器”),'))[1]。split(',{labels:')[0]
对于范围内的i(values.count('new Date')):
日期=值。拆分('新日期('')[i+1]。拆分('''')[0]
value=values.split(“”)[i+1]。split(“]”)[0]
打印(日期、值)

这?

关键是从脚本中提取数据。我不知道下面的方法是否是您想要的

from simplified_scrapy import utils, SimplifiedDoc, req
html = req.get(
    'https://bitinfocharts.com/comparison/bitcoin-transactions.html')

doc = SimplifiedDoc(html)
js = doc.getElementByText('new Dygraph', tag='script').html
js = js[js.find('document.getElementById("container"),') +
        len('document.getElementById("container"),'):]
js = js[:js.find(', {labels:')] # Get data part
js = js.replace('[new Date("', '').replace('")', '')[1:-2]
data = [kv.split(',') for kv in js.split('],')]
print(data)
结果:

[['2009/01/03', 'null'], ['2009/01/04', 'null'], ['2009/01/05', 'null'], ['2009/01/06', 'null'], ['2009/01/07', 'null'], ['2009/01/08', 'null'], ['2009/01/09', 'null'], ...

关键是从脚本中提取数据。我不知道下面的方法是否是您想要的

from simplified_scrapy import utils, SimplifiedDoc, req
html = req.get(
    'https://bitinfocharts.com/comparison/bitcoin-transactions.html')

doc = SimplifiedDoc(html)
js = doc.getElementByText('new Dygraph', tag='script').html
js = js[js.find('document.getElementById("container"),') +
        len('document.getElementById("container"),'):]
js = js[:js.find(', {labels:')] # Get data part
js = js.replace('[new Date("', '').replace('")', '')[1:-2]
data = [kv.split(',') for kv in js.split('],')]
print(data)
结果:

[['2009/01/03', 'null'], ['2009/01/04', 'null'], ['2009/01/05', 'null'], ['2009/01/06', 'null'], ['2009/01/07', 'null'], ['2009/01/08', 'null'], ['2009/01/09', 'null'], ...