Python 如何刮取';它是实时计算的

Python 如何刮取';它是实时计算的,python,web-scraping,python-requests,Python,Web Scraping,Python Requests,我正在尝试从在线计算器中提取一个值,这里我想要的值是5.1,已经计算出来了:。问题是当我写下以下内容时 page = requests.get('https://nvd.nist.gov/vuln-metrics/cvss/v3-calculator?vector=AV:A/AC:H/PR:L/UI:R/S:C/C:L/I:L/A:L') print(page.content) 我看到以下片段: <dd id="cvss-overall-score-cell">{{vm.overa

我正在尝试从在线计算器中提取一个值,这里我想要的值是5.1,已经计算出来了:。问题是当我写下以下内容时

page = requests.get('https://nvd.nist.gov/vuln-metrics/cvss/v3-calculator?vector=AV:A/AC:H/PR:L/UI:R/S:C/C:L/I:L/A:L')
print(page.content)
我看到以下片段:

<dd id="cvss-overall-score-cell">{{vm.overallScore}}</dd>\r\n
{{vm.overallScore}}\r\n
我相信这意味着仍需要进行一些计算。但如果我打开chrome的开发工具,我可以找到以下内容:


其中一些文本似乎无法翻译,但我对这方面的内容还很陌生,所以我不确定是否正确使用了请求(我也在使用BeautifulSoup,但在这里没有看到它的用途)。我猜页面需要一秒钟的时间来加载触发计算的字符串;就像现在一样,我想我正在抓取非人口数据,页面需要一秒钟才能加载。因此,我可以暂停请求或类似的操作吗?或者有更好的方法吗?

您看到的是一个模板表达式,稍后将被Javascript替换。In看起来像AngularJS模板代码(尽管语法在各种框架中非常常见)

由于您不是在执行Javascript,而是在下载HTML,因此不会显示该值


实际值可能是通过其他方式获得的,比如HTTPRequest。打开浏览器开发工具并查看“网络”选项卡。还要检查源代码。您查找的值应该是页面中的Javascript,或者通过单独的HTTP请求从服务器动态获取。

您可以使用selenium和CSS选择器从图表中获取相同的值

右侧的每个值都可以从左侧的图表中获取。此处的示例显示了总体CVSS分数:

from selenium import webdriver
from selenium.webdriver.chrome.options import Options  

chrome_options = Options()  
chrome_options.add_argument("--headless")  
url ="https://nvd.nist.gov/vuln-metrics/cvss/v3-calculator?vector=AV:A/AC:H/PR:L/UI:R/S:C/C:L/I:L/A:L"

d = webdriver.Chrome(chrome_options=chrome_options)
d.get(url)
print(d.find_element_by_css_selector("#cvss-overall-score-chart > div.jqplot-point-label.jqplot-series-0.jqplot-point-0").text)
d.quit()


当元素之间的content textnode看起来像{{vm.overallScore}}时,这意味着在javascript ie angular有机会替换该指令之前,您已经清除了DOM。在加载文档和运行JS之后,您能稍等片刻,然后再刮取值吗?虽然我已经检查了您所指的页面,并且值不容易找到,但请注意,您可能需要追溯相当多的AngularJS代码,以找到值是如何获得的……是的,工作正常。有没有办法阻止网页打开?它是无头运行的,所以不应该打开。