python beautifulsoup yahoo-finance

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&region=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&region=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 ?