导入雅虎财务股票价格与beautifulsoup和要求

时间:2017-07-26 21:42:14

标签: python beautifulsoup request stock

所以我有一个检查股票价格的脚本。雅虎改变了一些东西,现在我得到了%变化而不是股票价格。以下是原始脚本。当我运行它时,我得到" +0.70(+0.03%)"而不是2,477.83。我真正看到的唯一区别是:

数据reactid =" 36"

数据reactid =" 35"

当我改为35时,它失败了。 36个作品,但仅显示%变化。我想要股票价格,而不是%变化。

感谢您的帮助!

import urllib.request
from bs4 import BeautifulSoup


# S&P 500
page = urllib.request.urlopen("https://finance.yahoo.com/quote/%5EGSPC?p=^GSPC")
content = page.read().decode('utf-8')
soup = BeautifulSoup(content, 'html.parser')
valsp = soup.find("span", {"data-reactid": "36"}).decode_contents(formatter="html")
print(valsp)

1 个答案:

答案 0 :(得分:1)

有多个span元素,其属性为data-reactid =“35”,因此请按类属性选择所需的元素。

import urllib.request
from bs4 import BeautifulSoup

# S&P 500
page = urllib.request.urlopen("https://finance.yahoo.com/quote/%5EGSPC?p=^GSPC")
content = page.read().decode('utf-8')
soup = BeautifulSoup(content, 'html.parser')
# print (soup)
valsp = soup.find("span", {"data-reactid": "35", "class" : "Trsdu(0.3s) Fw(b) Fz(36px) Mb(-4px) D(ib)"}).decode_contents(formatter="html")
print(valsp)

输出:

2,477.83

唯一的变化就是代码中的这一行:

valsp = soup.find("span", {"data-reactid":"35"}).decode_contents(formatter="html")

valsp = soup.find("span", {"data-reactid": "35", "class" : "Trsdu(0.3s) Fw(b) Fz(36px) Mb(-4px) D(ib)"}).decode_contents(formatter="html")