Yahoo Finance ist eine der meistbesuchten Plattformen zur Verfolgung von Aktien, Indizes und Kryptowährungen, und seine Kursseiten enthalten genau die strukturierten Marktdaten, die für Preisverfolgung, Screening und Recherche benötigt werden: der letzte Preis, die Tagesveränderung, der Vortagsschlusskurs, die Marktkapitalisierung, das Volumen und die Tagesspanne. Wer eine Watchlist mit Tickersymbolen im Blick behält, findet in diesen öffentlichen Kursdaten das Rohmaterial, und sie manuell über Dutzende von Symbolen hinweg zu lesen ist langsam und fehleranfällig.
Diese Anleitung zeigt Ihnen, wie Sie Yahoo Finance mit Python auf zuverlässige Weise scrapen. Sie bauen einen kleinen, ausführbaren Scraper, der gerenderte Kursseiten über die Crawling API abruft, die gewünschten Felder mit BeautifulSoup analysiert, eine Liste von Tickern durchläuft und saubere JSON- und CSV-Exporte erzeugt. Die gesamte Anleitung beschränkt sich auf öffentliche Marktdaten, und der Abschnitt zur Rechtmäßigkeit am Ende ist kein Boilerplate, also lesen Sie ihn, bevor Sie dies auf reales Volumen anwenden.
Was Sie bauen werden
Ein Python-Skript, das eine Liste von Tickersymbolen entgegennimmt, jede gerenderte Yahoo Finance-Kursseite über die Crawling API abruft und einen strukturierten Datensatz pro Symbol extrahiert. Das laufende Beispiel verwendet AAPL, TSLA und BTC-USD. Wir extrahieren diese Felder:
- Preis der aktuellste Handelspreis für das Symbol.
- Veränderung die Preisveränderung gegenüber dem Vortagsschluss, sowohl der absolute Wert als auch der Prozentsatz.
- Vortagsschluss der Schlusskurs der vorherigen Handelssitzung.
- Marktkapitalisierung die in der Kursstatistik angezeigte Gesamtmarktkapitalisierung.
- Volumen die Anzahl der in der aktuellen Sitzung gehandelten Aktien oder Einheiten.
- Tagesspanne das Niedrig-Hoch-Preisband für den aktuellen Handelstag.
Warum eine einfache Anfrage bei Yahoo Finance scheitert
Wenn Sie eine Yahoo Finance-Kurs-URL mit einem einfachen HTTP-Client anfordern, erhalten Sie eine Antwort mit Status 200 und nur einem Bruchteil der Zahlen im Body. Zwei Faktoren arbeiten gegen Sie. Erstens rendert die Kursseite ihren Live-Preis, ihre Veränderung und Statistiktabelle im Browser über JavaScript, sodass das anfängliche HTML eine dünne Hülle ist, die sich erst füllt, nachdem die Skripte der Seite ausgeführt wurden. Parsen Sie diese erste Antwort und Sie erfassen Platzhalter oder leere Knoten statt der echten Zahlen. Zweitens kennzeichnet Yahoo automatisierten Traffic schnell: Datacenter-IPs und Anfragemuster, die nicht wie ein echter Browser aussehen, werden ratenbegrenzt, zu einer Zustimmungswand weitergeleitet oder herausgefordert, bevor sie jemals den gerenderten Inhalt erreichen.
Ein funktionierender Yahoo Finance-Scraper benötigt also zwei Dinge in einer Anfrage: einen Browser, der die Seite tatsächlich rendert, und eine IP, die die Plattform als echten Besucher liest. Sie können das selbst mit einem Headless-Browser und einem Pool rotierender Residential-Proxies zusammenbauen, aber diese zusammenzuhalten und gesund zu halten ist der Großteil der Arbeit. Die Crawling API faltet beides in einen einzigen Aufruf: Sie senden ihr die URL mit einem JavaScript-Token, sie rendert die Seite hinter einer vertrauenswürdigen IP und gibt fertiges HTML zur Analyse zurück. Den Hintergrund zu Rendering-Targets wie diesem finden Sie im Leitfaden zum Scrapen von JavaScript-Seiten mit Python.
Crawlbase bietet zwei Token-Typen an. Das normale Token ruft statisches HTML ab; das JavaScript-Token (JS-Token) rendert die Seite zuerst in einem echten Browser. Yahoo Finance befüllt seine Preis- und Statistikfelder clientseitig, daher benötigen Sie hier das JS-Token. Das normale Token gibt dieselbe dünne Hülle zurück wie ein einfacher Abruf, und es gibt wenig Nützliches daraus zu parsen.
Voraussetzungen
Sie benötigen einige Dinge, bevor Sie Code schreiben. Keines davon dauert lange.
Python-Grundkenntnisse. Sie sollten mit dem Schreiben und Ausführen eines Python-Skripts und dem Installieren von Paketen mit pip vertraut sein. Falls Sie neu im Parsing-Bereich sind, ist der BeautifulSoup-Leitfaden eine gute Ergänzung zu diesem Tutorial.
Python 3.8 oder höher. Prüfen Sie Ihre Version mit python --version. Falls Sie es nicht haben, installieren Sie es von python.org oder über eine Distribution wie Anaconda und stellen Sie sicher, dass Python in Ihrem PATH ist.
Ein Crawlbase-Konto und JS-Token. Melden Sie sich an, öffnen Sie Ihr Dashboard und kopieren Sie Ihr JavaScript-Token (JS-Token) von der Konto-Dokumentationsseite. Crawlbase enthält bis zu 20.000 kostenlose Anfragen zum Starten, was für diesen Leitfaden mehr als ausreichend ist. Behandeln Sie das Token wie ein Passwort: Es authentifiziert Ihre Anfragen, also halten Sie es außerhalb der Versionsverwaltung.
Das Projekt einrichten
Erstellen Sie eine virtuelle Umgebung, damit Projektabhängigkeiten isoliert bleiben, und installieren Sie dann die Bibliotheken, die der Scraper benötigt.
python --version python -m venv yahoo_env source yahoo_env/bin/activate pip install crawlbase beautifulsoup4
Unter Windows aktivieren Sie die Umgebung mit yahoo_env\Scripts\activate statt der source-Zeile. Zwei Abhängigkeiten erledigen die Arbeit: crawlbase ist der offizielle Client für die Crawling API, und beautifulsoup4 analysiert das zurückgegebene HTML, sodass Sie einzelne Felder per CSS-Selektor extrahieren können. Sowohl json als auch csv werden mit der Standardbibliothek geliefert, daher gibt es für den Export-Schritt nichts mehr zu installieren.
Schritt 1: Eine gerenderte Kursseite abrufen
Beginnen Sie damit, eine fertige Seite zu erhalten. Importieren Sie die CrawlingAPI-Klasse, initialisieren Sie sie mit Ihrem JS-Token und fordern Sie eine Yahoo Finance-Kurs-URL an. Yahoo lädt seinen Preis und seine Statistiken asynchron, also übergeben Sie ajax_wait und page_wait, um auf den dynamischen Inhalt zu warten, bevor die Seite erfasst wird. Das Prüfen des Crawlbase-cb_status (legacy pc_status) vor dem Parsen hält Fehler laut statt still.
from crawlbase import CrawlingAPI api = CrawlingAPI({"token": "YOUR_CRAWLBASE_TOKEN"}) OPTIONS = { "user_agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:109.0) Gecko/20100101 Firefox/122.0", "ajax_wait": "true", "page_wait": 5000, } def crawl(page_url): response = api.get(page_url, OPTIONS) if response["headers"]["cb_status"] == "200": return response["body"].decode("utf-8") print(f"Request failed: {response['headers']['cb_status']}") return None if __name__ == "__main__": quote_url = "https://finance.yahoo.com/quote/AAPL" html = crawl(quote_url) print(html[:500] if html else "No HTML returned")
Die beiden Warte-Optionen sind wichtig für ein clientseitig gerendertes Ziel wie dieses. ajax_wait weist die API an, auf den Abschluss asynchroner Inhalte zu warten, und page_wait wartet eine feste Anzahl von Millisekunden nach dem Laden, damit sich der Live-Preis setzt, bevor die Seite erfasst wird. Fünf Sekunden sind ein vernünftiger Ausgangspunkt; erhöhen Sie den Wert, wenn die Zahlen leer zurückkommen. Führen Sie das Skript mit python yahoo_scraper.py aus und Sie sollten echtes Kurs-Markup sehen, nicht die Hülle, die eine einfache Anfrage zurückgibt. Das bestätigt, dass das Rendering funktioniert, bevor Sie einen einzigen Selektor schreiben.
Ein Yahoo Finance-Kurs benötigt eine gerenderte Seite hinter einer vertrauenswürdigen IP, in einem Aufruf, was genau das ist, was die oben genannten Optionen ajax_wait und page_wait einrichten. Die Crawling API nimmt ein JS-Token, führt die Seite in einem echten Browser aus, rotiert serverseitig durch Residential-IPs und gibt Ihnen fertiges HTML zurück, sodass Sie weder eine Headless-Flotte noch einen eigenen Proxy-Pool betreiben müssen. Testen Sie es zuerst mit einer öffentlichen Kursseite im kostenlosen Tarif.
Schritt 2: Den Kurskopf und die Veränderung parsen
Yahoo Finance stellt seine Live-Zahlen über stabile data-testid-Attribute im Kurs-Header bereit, was sie zu zuverlässigen Parsing-Zielen macht. Laden Sie das gerenderte HTML in BeautifulSoup und lesen Sie den Titel, den Preis und die Veränderung aus diesen Attributen. Jede Abfrage ist abgesichert, sodass ein fehlendes Feld None zurückgibt, anstatt den Lauf zu unterbrechen.
from bs4 import BeautifulSoup def text_of(soup, selector): el = soup.select_one(selector) return el.get_text(strip=True) if el else None def scrape_header(html): soup = BeautifulSoup(html, "html.parser") return { "title": text_of(soup, "div.hdr h1"), "price": text_of(soup, '.livePrice[data-testid="qsp-price"]'), "change": text_of(soup, '.priceChange[data-testid="qsp-price-change"]'), "change_percent": text_of(soup, '[data-testid="qsp-price-change-percent"]'), }
Der Helfer text_of fragt ein Element ab und gibt seinen bereinigten Text zurück, oder None, wenn das Element fehlt, sodass ein Symbol, das ein Feld auslässt, die Schleife nicht unterbricht. Die Selektoren stammen direkt aus dem Kurs-Header von Yahoo: title liest den Unternehmensnamen und Ticker aus der div.hdr h1-Überschrift, price liest den Live-Preis-Knoten mit der Kennung qsp-price, und die beiden Veränderungs-Selektoren lesen die absolute Bewegung (qsp-price-change) und die prozentuale Bewegung (qsp-price-change-percent), die daneben stehen.
Schritt 3: Die Statistiktabelle parsen
Unter dem Header rendert Yahoo Finance einen kleinen Statistikblock mit Vortagsschluss, Marktkapitalisierung, Volumen, Tagesspanne und mehr. Jede Kennzahl sitzt in einem Listenelement mit einem data-field-Attribut, sodass Sie den Wert-Knoten per Feldname statt per fragiler Position lesen. Das hält das Parsen stabil, auch wenn Yahoo das Grid neu anordnet.
STAT_FIELDS = { "previous_close": "regularMarketPreviousClose", "market_cap": "marketCap", "volume": "regularMarketVolume", "day_range": "regularMarketDayRange", } def scrape_stats(soup): stats = {} for key, field in STAT_FIELDS.items(): stats[key] = text_of( soup, f'li[data-field="{field}"] span.value, li[data-field="{field}"] fin-streamer' ) return stats
Die STAT_FIELDS-Map ordnet jeden Ausgabenamen dem internen Feldnamen von Yahoo zu. Yahoo packt Live-Werte in ein fin-streamer-Element und statische Werte in ein span.value, daher versucht der Selektor beides und nimmt, was vorhanden ist. Um den genauen Feldnamen für eine Kennzahl zu finden, öffnen Sie eine Kursseite in Ihrem Browser, klicken Sie mit der rechten Maustaste auf den Wert und lesen Sie das data-field-Attribut an seinem Listenelement ab. Die Tagesspanne kommt als einzelner String wie 168.49 - 171.05 zurück, den Sie bei Bedarf am Bindestrich aufteilen können, wenn Sie separate Tief- und Hochzahlen möchten.
Yahoo Finance überarbeitet sein Kurs-Markup regelmäßig, und die generierten Klassennamen ändern sich damit. Die hier verwendeten data-testid- und data-field-Attribute sind stabiler als Klassennamen, aber behandeln Sie jeden Selektor als Ausgangspunkt, nicht als Vertrag. Wenn ein Feld None zurückgibt, prüfen Sie die Live-Seite erneut in den Entwicklertools Ihres Browsers und aktualisieren Sie den Selektor. Regelmäßige Selektor-Pflege ist für jeden Produktions-Scraper normal, kein Zeichen, dass etwas kaputt ist.
Schritt 4: Das vollständige Skript zusammensetzen
Verbinden Sie nun die Teile zu einem ausführbaren Skript: Durchlaufen Sie eine Liste von Tickern, rufen Sie jede gerenderte Kursseite mit einem kleinen Retry-Wrapper ab, parsen Sie Header und Statistiken in einen einzigen Datensatz und exportieren Sie die Datensätze nach JSON und CSV.
import csv import json import time from crawlbase import CrawlingAPI from bs4 import BeautifulSoup api = CrawlingAPI({"token": "YOUR_CRAWLBASE_TOKEN"}) OPTIONS = { "user_agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:109.0) Gecko/20100101 Firefox/122.0", "ajax_wait": "true", "page_wait": 5000, } STAT_FIELDS = { "previous_close": "regularMarketPreviousClose", "market_cap": "marketCap", "volume": "regularMarketVolume", "day_range": "regularMarketDayRange", } def crawl(page_url): response = api.get(page_url, OPTIONS) if response["headers"]["cb_status"] == "200": return response["body"].decode("utf-8") print(f"Request failed: {response['headers']['cb_status']}") return None def fetch_html(page_url, max_retries=2): for attempt in range(max_retries + 1): html = crawl(page_url) if html: return html if attempt < max_retries: time.sleep(1) return None def text_of(soup, selector): el = soup.select_one(selector) return el.get_text(strip=True) if el else None def scrape_quote(html, symbol): soup = BeautifulSoup(html, "html.parser") record = { "symbol": symbol, "title": text_of(soup, "div.hdr h1"), "price": text_of(soup, '.livePrice[data-testid="qsp-price"]'), "change": text_of(soup, '.priceChange[data-testid="qsp-price-change"]'), "change_percent": text_of(soup, '[data-testid="qsp-price-change-percent"]'), } for key, field in STAT_FIELDS.items(): record[key] = text_of( soup, f'li[data-field="{field}"] span.value, li[data-field="{field}"] fin-streamer' ) return record def save_outputs(records): with open("yahoo_quotes.json", "w") as f: json.dump(records, f, indent=2) if not records: return with open("yahoo_quotes.csv", "w", newline="") as f: writer = csv.DictWriter(f, fieldnames=records[0].keys()) writer.writeheader() writer.writerows(records) def main(): symbols = ["AAPL", "TSLA", "BTC-USD"] records = [] for symbol in symbols: url = f"https://finance.yahoo.com/quote/{symbol}" html = fetch_html(url) if html: records.append(scrape_quote(html, symbol)) time.sleep(2) save_outputs(records) print(f"Saved {len(records)} quotes") if __name__ == "__main__": main()
Das Skript durchläuft die Ticker-Liste, ruft jede Kursseite mit dem Retry-Wrapper ab, fasst die Header-Felder und Statistiken in einem Datensatz zusammen und taktet die Schleife mit einem Zwei-Sekunden-Sleep. save_outputs schreibt sowohl eine JSON-Datei als auch eine CSV, wobei die Schlüssel des ersten Datensatzes als Header verwendet werden, sodass die Daten in der Form vorliegen, die Ihr nachgelagertes Tool benötigt. Fügen Sie Symbole in der symbols-Liste hinzu oder entfernen Sie sie, um Ihrer eigenen Watchlist zu entsprechen.
Wie die Ausgabe aussieht
Führen Sie das vollständige Skript mit python yahoo_scraper.py aus und Sie erhalten einen sauberen strukturierten Datensatz pro Symbol, bereit für Analyse, eine Datenbank oder eine Tabellenkalkulation. Die untenstehenden Werte sind beispielhaft; Live-Zahlen ändern sich jede Sitzung.
[ { "symbol": "AAPL", "title": "Apple Inc. (AAPL)", "price": "168.99", "change": "-3.70", "change_percent": "(-2.14%)", "previous_close": "172.69", "market_cap": "2.61T", "volume": "54,318,920", "day_range": "168.49 - 171.05" }, { "symbol": "TSLA", "title": "Tesla, Inc. (TSLA)", "price": "156.90", "change": "-4.58", "change_percent": "(-2.84%)", "previous_close": "161.48", "market_cap": "499.81B", "volume": "112,045,300", "day_range": "155.41 - 160.39" } ]
Die passende CSV enthält dieselben Spalten, eine Zeile pro Symbol, die sich direkt in pandas oder eine Tabellenkalkulation einfügt, um eine Watchlist zu visualisieren oder Tagesbewegungen über Ticker hinweg zu vergleichen.
Skalierung auf viele Ticker und ungeblockt bleiben
Selbst mit erledigendem Rendering beobachtet Yahoo scraperförmigen Traffic. Einige Gewohnheiten halten einen längeren Lauf gesund und gelten für jedes schwer gesicherte kommerzielle Ziel.
- Anfragen takten. Kursseiten in einer engen Schleife zu hämmern ist der schnellste Weg, gedrosselt oder herausgefordert zu werden. Die oben genannten Zwei-Sekunden-Sleeps sind die Untergrenze, nicht die Obergrenze; erweitern Sie sie für größere Watchlists und variieren Sie Ihre Ticker, anstatt einen Pfad mit voller Geschwindigkeit zu crawlen.
- Auf Rotation setzen. Ein Pool von Residential-IPs verteilt Anfragen über viele reale Benutzeradressen, sodass keine einzelne ein Rate-Limit auslöst. Die Crawling API erledigt das für Sie; wenn Sie einen eigenen Stack betreiben, ist das der Teil, den Sie richtig machen müssen.
-
Statuscodes lesen. Ein Lauf, der anfängt, Nicht-200-
cb_status-Werte zurückzugeben, signalisiert, dass die aktuelle Rate oder IP-Ebene nicht mehr ausreicht. Behandeln Sie das als Signal zum Zurückgehen, nicht als Rauschen, das Sie ignorieren.
Für eine große Watchlist stellt der asynchrone Crawler Anfragen in eine Warteschlange und liefert Ergebnisse an einen Webhook, was für das Abrufen hunderter Kursseiten ohne offene Verbindungen geeignet ist. Für das breitere Playbook lesen Sie wie man Websites scrapt ohne gesperrt zu werden und die Anmerkungen zu großvolumigem Finance-Scraping. Das gleiche Parse-Muster gilt auch für andere Marktquellen, wie das Scrapen von Krypto-Preisen von CoinMarketCap.
Ist es legal, Yahoo Finance zu scrapen?
Ob das Scrapen von Yahoo Finance erlaubt ist, hängt von Yahoos Nutzungsbedingungen, Ihrer Jurisdiktion und dem ab, was Sie mit den Daten tun. Yahoos Bedingungen beschränken den automatisierten Zugriff und die Massendatenerfassung, sodass Scraping gegen diese Bedingungen verstoßen kann, unabhängig davon, wie sorgfältig Ihre Werkzeuge sind. Die auf einer Kursseite angezeigten Zahlen sind eher faktische Marktdaten als persönliche Daten, was den Datenschutz-Einsatz verringert, aber nicht außerhalb der Bedingungen der Website stellt. Keiner der hier verwendeten Codes ändert das; er macht nur den technischen Teil funktionsfähig. Lesen Sie Yahoos Finance-Nutzungsbedingungen und seine robots.txt und behandeln Sie beides als Grenze für das, was Sie sammeln.
Die schwerwiegendere Beschränkung bei Finanzdaten ist die Lizenzierung, nicht der Datenschutz. Die Preise, Marktkapitalisierung und das Volumen, das Yahoo anzeigt, sind nicht Yahoos eigene Messwerte: Sie stammen von Börsen und Drittanbieter-Marktdaten-Anbietern, und diese Feeds haben ihre eigenen Weitergabe-Beschränkungen. Das Sammeln einer Zahl von einer öffentlichen Seite gibt Ihnen keine Lizenz, diese zu veröffentlichen, weiterzuverkaufen oder ein kommerzielles Produkt darauf aufzubauen. Bleiben Sie auf öffentlichen Kurs- und Statistikseiten, halten Sie Ihr Anfragevolumen so bescheiden, dass Sie Yahoos Server nicht belasten, und scrapen Sie nichts hinter einem Login, einer Paywall oder einem Premium-Tier wie Yahoo Finance Plus.
Dieser Leitfaden ist bewusst auf öffentliche Marktdaten beschränkt, weil das die Linie ist, die die Arbeit vertretbar hält. Für alles über leichte Recherche, Ad-hoc-Analyse oder eine persönliche Watchlist hinaus ist der richtige Weg ein lizenzierter Feed: Yahoo und seine Datenpartner sowie dedizierte Marktdaten-Anbieter und Börsen-APIs bieten offiziellen, nutzungsbedingungskonformen Zugang für die Produktionsnutzung. Wenn Sie Optionen abwägen, ist unsere Übersicht der besten Finanzdaten-Anbieter ein guter Ausgangspunkt. Ein lizenzierter Feed ist für kommerzielle oder hochvolumige Nutzung der richtige Weg, kein cleverer Scraper.
Wichtigste Erkenntnisse
- Yahoo Finance wird clientseitig gerendert. Eine einfache Anfrage gibt eine dünne Hülle mit Platzhalterwerten zurück, daher müssen Sie die Seite rendern, bevor Sie Preis und Statistiken parsen.
-
Sie benötigen Rendering und eine vertrauenswürdige IP zusammen. Die Crawling API mit einem JS-Token erledigt beides in einem Aufruf;
ajax_waitundpage_waitsteuern, wie lange auf die Live-Zahlen gewartet wird. -
Nach stabilen Attributen parsen. Den Header über
data-testid-Werte wieqsp-priceund die Statistiken überdata-field-Namen wiemarketCaplesen, die Markup-Änderungen besser überleben als Klassennamen. - Schleifen und exportieren. Über eine Ticker-Liste iterieren, den Lauf mit kurzen Sleeps takten und die Datensätze nach JSON und CSV schreiben, damit die Daten in pandas oder eine Tabellenkalkulation einfließen.
- Lizenzierung beachten. Die Zahlen kommen von Börsen und Datenanbietern mit eigenen Weitergabe-Bedingungen; öffentliche Seiten verwenden und für kommerzielle oder hochvolumige Nutzung einen lizenzierten Feed nutzen.
Häufig gestellte Fragen
Warum gibt eine einfache Anfrage leere Preise von Yahoo Finance zurück?
Weil Yahoo seinen Live-Preis, seine Veränderung und Statistiktabelle clientseitig mit JavaScript lädt. Das anfängliche HTML ist eine Hülle, die sich erst füllt, nachdem die Skripte der Seite in einem Browser ausgeführt werden, sodass eine rohe HTTP-Anfrage Status 200 mit Platzhalter- oder leeren Wert-Knoten zurückgibt. Um die echten Zahlen zu erhalten, müssen Sie die Seite zuerst rendern, was das JS-Token der Crawling API für Sie erledigt.
Benötige ich das normale Token oder das JS-Token für Yahoo Finance?
Das JS-Token. Das normale Token ruft statisches HTML ab, was auf einer Yahoo-Kursseite dieselbe dünne Hülle wie ein einfacher Abruf ist. Das JS-Token rendert die Seite in einem echten Browser, bevor es das HTML zurückgibt, sodass Preis, Veränderung und Statistiken vorhanden sind, wenn BeautifulSoup sie parst.
Welche Felder kann ich von einer Yahoo Finance-Kursseite extrahieren?
Die öffentlichen Marktdaten auf der Seite: der letzte Preis, die absolute und prozentuale Veränderung gegenüber dem Vortagsschluss, der Vortagsschluss selbst, Marktkapitalisierung, Volumen und die Tagesspanne. Das sind faktische Kurs- und Statistikfelder, keine persönlichen Daten. Bleiben Sie auf den öffentlichen Kursseiten und vermeiden Sie alles hinter einem Login oder einem Premium-Tier.
Meine Selektoren geben None zurück. Was hat sich geändert?
Höchstwahrscheinlich das Markup von Yahoo. Die Website überarbeitet ihr Kurs-Layout regelmäßig, und generierte Klassennamen ändern sich damit. Die hier verwendeten data-testid-Attribute (qsp-price, qsp-price-change) und data-field-Namen (marketCap, regularMarketVolume) sind stabiler als Klassen, können sich aber dennoch verschieben. Prüfen Sie eine Live-Seite erneut in den Entwicklertools Ihres Browsers und aktualisieren Sie die Selektoren; regelmäßige Pflege ist für jeden Produktions-Scraper normal.
Wie scrappe ich viele Ticker, ohne gesperrt zu werden?
Durchlaufen Sie Ihre Symbolliste, halten Sie einen kurzen Sleep zwischen Anfragen und lassen Sie die Crawling API Residential-IPs rotieren, sodass keine einzelne Adresse ein Rate-Limit auslöst. Für eine große Watchlist wechseln Sie zum asynchronen Crawler, der Anfragen in eine Warteschlange stellt und Ergebnisse an einen Webhook sendet, anstatt Verbindungen offen zu halten. Beobachten Sie den cb_status-Header und gehen Sie zurück, wenn er anfängt, Nicht-200-Werte zurückzugeben.
Kann ich gescrapte Yahoo Finance-Daten kommerziell verwenden?
Behandeln Sie das als rechtliche Frage, nicht als technische. Die Preise und Statistiken auf Yahoo stammen von Börsen und lizenzierten Marktdaten-Anbietern mit ihren eigenen Weitergabe-Bedingungen, und Yahoos eigene Nutzungsbedingungen beschränken automatische Erfassung und Weiterverwendung. Für kommerzielle oder hochvolumige Nutzung ist der richtige Weg ein lizenzierter Marktdaten-Feed oder eine offizielle API, kein Scraper. Prüfen Sie die Bedingungen und holen Sie rechtlichen Rat ein, bevor Sie ein Produkt auf den Daten aufbauen.
Crawlen Sie jede Website im großen Maßstab, ohne gegen die Infrastruktur zu kämpfen.
Crawlbase übernimmt Proxys, Fingerprints und CAPTCHAs, damit Ihr Team Datenpipelines ausliefert, statt Crawl-Infrastruktur zu pflegen. 1.000 Anfragen kostenlos, keine Karte erforderlich.

