Bastante nueva en Python.

Estoy tratando de obtener el precio de las acciones de

url = "https://finance.yahoo.com/quote/" + readsymbollist[i]
sauce = urllib.request.urlopen(url).read()
soup = bs.BeautifulSoup(sauce,'lxml')

stockcompany = soup.find('h1', {'data-reactid': '7'}).text
#getcurrentprice = soup.find('span',{'data-reactid': '35'}).text

getcurrentprice = soup.find('span',{'class':'Trsdu(0.3s) Fw(b) Fz(36px) Mb(-4px) D(ib)'})

Esa es la clase pero no devuelve nada.

También este código solía funcionar con data-reactid: 35 pero ya no. ¿por qué funciona datareactid 7 y, sin embargo, ya no veo ese lapso específico en la página?

Gracias a todos

0
Ernie Flowers 30 oct. 2017 a las 20:12

3 respuestas

La mejor respuesta

Dependiendo del elemento que intente obtener, tal vez primero comience por encontrar la etiqueta más alta, 'div' en este caso, luego encuentre la etiqueta 'span', debería dar el precio.

# url = "https://finance.yahoo.com/quote/" + readsymbollist[i]
url = "https://finance.yahoo.com/quote/" + 'UA'  # example
sauce = urllib2.urlopen(url).read()
soup = bs4.BeautifulSoup(sauce,'lxml')

stockcompany = soup.find('h1', {'data-reactid': '7'}).text

# find the parent div
div = soup.find('div', {'class': 'Mt(6px) smartphone_Mt(15px)'}) 

Resultados:

print stockcompany           # UA - Under Armour, Inc.

# find the 'span' tag inside the div from previous step
print div.find('span').text  # 14.74

Espero que esto ayude.

0
davedwards 30 oct. 2017 a las 20:44

Es posible que desee echar un vistazo al pandas-datareader, lo he usado y Lo encontré extremadamente útil. Es bueno para obtener precios de acciones de Yahoo Finance.

0
Josh D 30 oct. 2017 a las 19:42

Ver documentación de esas funciones. Probablemente en la última función necesita escapar ('\') caracteres especiales, como ",", etc.

0
samthegolden 30 oct. 2017 a las 17:16