Usando BeautifulSoup para buscar a través de Yahoo Finance

Estoy tratando de obtener información de la página ‘Estadísticas clave’ para un ticker en Yahoo (ya que esto no es compatible con la biblioteca de 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) 

Edit: gracias Andy!

Pregunta: Esto es imprimir una matriz vacía. ¿Cómo cambio mi findAll para devolver 598.56B ?

Bueno, la razón por la que la lista que encuentra find_all está vacía es porque los datos se generan 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 la red, puede encontrar la URL que debe enviar también a la solicitud GET .

En este caso, se trata de 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 de personas Podemos ver aquí: introduzca la descripción de la imagen aquí

Entonces, ¿cómo recreamos 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 por el dict hasta que encuentre los datos que está buscando:

 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'