импортировать цену акций Yahoo Finance с помощью BeautifulSoup и запроса

Итак, у меня есть скрипт, который проверяет цены на акции. Yahoo изменил что-то, и теперь я получаю изменение в %, а не цену акции. Ниже представлен оригинальный сценарий. Когда я запускаю его, я получаю «+0,70 (+0,03%)», а не 2477,83. Единственная разница, которую я действительно вижу, это:

данные-реактид = "36"

и

данные-реагируют = "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)

person New_Py_Guy    schedule 26.07.2017    source источник


Ответы (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")

to

valsp = soup.find("span", {"data-reactid": "35", "class" : "Trsdu(0.3s) Fw(b) Fz(36px) Mb(-4px) D(ib)"}).decode_contents(formatter="html")
person Dan-Dev    schedule 26.07.2017
comment
БОЛЬШОЕ СПАСИБО! - person New_Py_Guy; 27.07.2017