请求无法从网页获取文字?

时间:2018-03-07 08:58:13

标签: python python-3.x python-requests

我试图从网页上获取VIX的值。

我正在使用的代码:

raw_page = requests.get("https://www.nseindia.com/live_market/dynaContent/live_watch/vix_home_page.htm").text
soup = BeautifulSoup(raw_page, "lxml")
vix = soup.find("span",{"id":"vixIdxData"})
print(vix.text)

这给了我:

  

''

如果我看到vix,

<span id="vixIdxData" style=" font-size: 1.8em;font-weight: bold;line-height: 20px;">/span>

在网站上元素有文字

<span id="vixIdxData" style=" font-size: 1.8em;font-weight: bold;line-height: 20px;">15.785/span>

我希望通过使用请求获得15.785值。

2 个答案:

答案 0 :(得分:1)

您要查找的数据在页面来源中不可用。并且requests.get(...)只为您提供没有通过JavaScript动态添加的元素的页面源。但是,您仍然可以使用requests模块获取它。

在“网络”选项卡的开发人员工具中,您可以看到名为VixDetails.json的文件。正在向https://www.nseindia.com/live_market/dynaContent/live_watch/VixDetails.json发送请求,该请求以JSON格式返回数据。

enter image description here

您可以使用.json()模块的内置requests功能访问它。

r = requests.get('https://www.nseindia.com/live_market/dynaContent/live_watch/VixDetails.json')
data = r.json()
vix_price = data['currentVixSnapShot'][0]['CURRENT_PRICE']
print(vix_price)
# 15.7000

答案 1 :(得分:0)

当您在网络浏览器中打开页面时,getIndiaVixData.js脚本会将文本(例如15.785)插入span元素。

当您在Python中使用requests获取页面时,仅检索HTML代码并且不进行JavaScript处理。因此,span元素保持为空。

通过使用requests单独解析页面的HTML代码来获取数据是不可能的。