2016-08-30 2 views
3

Ich versuche, Informationen von der 'Key Statistics' Seite für einen Ticker in Yahoo zu ziehen (da dies nicht in der Pandas-Bibliothek unterstützt wird).BeautifulSoup verwenden, um durch Yahoo Finance zu suchen

Beispiel für 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: Dank Andy!

Frage: Dies ist ein leeres Array drucken. Wie ändere ich meine findAll, um 598.56B zurückzugeben?

Antwort

5

Nun, der Grund, warum die Liste, die find_all zurückgibt, leer ist, liegt daran, dass diese Daten mit einem separaten Aufruf generiert werden, der nicht durch Senden einer GET-Anforderung an diese URL abgeschlossen wird. Wenn Sie die Registerkarte "Netzwerk" in Chrome/Firefox durchsuchen und nach XHR filtern, können Sie anhand der Anforderungen und Antworten der einzelnen Netzwerkaktionen herausfinden, welche URL Sie senden möchten, auch die Anforderung GET.

In diesem Fall ist 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, wie wir hier sehen können: So enter image description here

, wie wir diese neu erstellen? Einfach! :

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() 

Dies wird die JSON Antwort als dict zurück. Navigieren Sie von dort aus durch die dict, bis Sie die gewünschten Daten gefunden haben:

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' 
+0

Das ist Gold! Ich bin neu bei der Webseiten-Verschrottung im Allgemeinen. Gibt es irgendwelche Ressourcen, auf die Sie mich hinweisen könnten, um ähnliche Fragen in naher Zukunft zu vermeiden? –

+1

Schauen Sie sich https://automatethebingingstuff.com/chapter11/ an und wenn Sie wirklich einen tiefen Tauchgang machen möchten, überlegen Sie http://shop.oreilly.com/product/0636920034391.do. Es ist eine großartige Fähigkeit zu haben. – n1c9

Verwandte Themen