从指定div类的元素中提取数字 - Beautifulsoup

时间:2018-02-13 19:04:57

标签: python beautifulsoup web-crawler

对于下面的链接,我想获取标题为“Current Calculated Hashrate”的框中的数字,然后打印该值。

<div class="panel-body" data-bind="text: hashrate() + ' H/s'">5,460.0 H/s</div>

div类是panel-body,我想从中提取hashrate()的值,但我尝试过没有成功。

这是我尝试的但它不起作用:

import requests
from bs4 import BeautifulSoup

content = requests.get('https://xmr.nanopool.org/account/4GdoN7NCTi8a5gZug7PrwZNKjvHFmKeV11L6pNJPgj5QNEHsN6eeX3DaAQFwZ1ufD4LYCZKArktt113W7QjWvQ7CWAg4LmpcRHG1W15Y6h/001').text
soup = BeautifulSoup(content, "html.parser")
H_column = soup.find('div', class_='panel-body').get('hashrate')
print (H_column)
exit()

1 个答案:

答案 0 :(得分:0)

您可以从data-bind="text: hashrate() + ' H/s'"部分看到文本是动态生成的。 requests模块无法执行任何脚本来获取动态生成的内容。 requests.get(...).text为您提供原始页面来源,其中包含

<div class="panel-body" data-bind="text: hashrate() + ' H/s'"></div>

而不是您在检查时看到的HTML部分。

要解决此问题,您可以使用Selenium(for installation and demo refer this link)。

import requests
from bs4 import BeautifulSoup
from selenium import webdriver

driver = webdriver.Chrome()
driver.get('https://xmr.nanopool.org/account/4GdoN7NCTi8a5gZug7PrwZNKjvHFmKeV11L6pNJPgj5QNEHsN6eeX3DaAQFwZ1ufD4LYCZKArktt113W7QjWvQ7CWAg4LmpcRHG1W15Y6h/001')
html = driver.page_source
driver.quit()

soup = BeautifulSoup(html, 'lxml')
hashrate = soup.find('div', {'data-bind': "text: hashrate() + ' H/s'"}).text
print(hashrate)

输出:

  

6,930.0 H / s