python - Usando BeautifulSoup para buscar a través de Yahoo Finance
yahoo-finance (1)
Bueno, la razón por la que la lista que find_all
devuelve está vacía es porque esa información se genera con una llamada separada que no se completa simplemente enviando una solicitud GET
a esa URL. Si mira a través de la pestaña Red en Chrome / Firefox y filtra por XHR, al examinar las solicitudes y respuestas de cada acción de red, puede encontrar a qué URL debe enviar la solicitud GET
también.
En este caso, es https://query2.finance.yahoo.com/v10/finance/quoteSummary/AAPL?formatted=true&crumb=8ldhetOu7RJ&lang=en-US®ion=US&modules=defaultKeyStatistics%2CfinancialData%2CcalendarEvents&corsDomain=finance.yahoo.com
, como podemos ver aquí:
Entonces, ¿cómo podemos recrear esto? ¡Sencillo! :
from bs4 import BeautifulSoup
import requests
r = requests.get(''https://query2.finance.yahoo.com/v10/finance/quoteSummary/AAPL?formatted=true&crumb=8ldhetOu7RJ&lang=en-US®ion=US&modules=defaultKeyStatistics%2CfinancialData%2CcalendarEvents&corsDomain=finance.yahoo.com'')
data = r.json()
Esto devolverá la respuesta JSON
como un dict
. Desde allí, navegue a través del dict
hasta encontrar los datos que busca:
financial_data = data[''quoteSummary''][''result''][0][''defaultKeyStatistics'']
enterprise_value_dict = financial_data[''enterpriseValue'']
print(enterprise_value_dict)
>>> {''fmt'': ''598.56B'', ''raw'': 598563094528, ''longFmt'': ''598,563,094,528''}
print(enterprise_value_dict[''fmt''])
>>> ''598.56B''
Estoy tratando de obtener información de la página ''Estadísticas clave'' para un ticker en Yahoo (ya que no es compatible con la biblioteca Pandas).
Ejemplo para AAPL:
from bs4 import BeautifulSoup
import requests
url = ''http://finance.yahoo.com/quote/AAPL/key-statistics?p=AAPL''
page = requests.get(url)
soup = BeautifulSoup(page.text, ''lxml'')
enterpriseValue = soup.findAll(''$ENTERPRISE_VALUE'', attrs={''class'': ''yfnc_tablehead1''}) #HTML tag for where enterprise value is located
print(enterpriseValue)
Edición: gracias Andy!
Pregunta: Esto es imprimir una matriz vacía. ¿Cómo cambio mi findAll
para devolver 598.56B
?