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®ion=US&modules=defaultKeyStatistics%2CfinancialData%2CcalendarEvents&corsDomain=finance.yahoo.com
, wie wir hier sehen können: So
, 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®ion=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'
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? –
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