Finanzentscheidungen basieren auf Daten. Ob Sie eine gehaltene Aktie beobachten, ein Markt-Dashboard aufbauen oder ein Forschungsmodell speisen: Die öffentlichen Zahlen, die den Markt bewegen (Kurse, Indexstände, veröffentlichte Unternehmensfinanzdaten), sind das Rohmaterial. Die meisten dieser Daten stehen auf Finanzseiten offen einsehbar, doch sie manuell über Dutzende von Tickern hinweg zu erfassen ist zeitaufwendig, und die dynamischen Seiten, die sie anzeigen, sind für die Darstellung im Browser gebaut, nicht dafür, einer einfachen Skriptanfrage direkt eine saubere Antwort zu liefern.
Dieser Leitfaden zeigt Ihnen, wie Sie Finanzdaten scrapen mit Python auf zuverlässige Weise. Er erläutert, welche öffentlichen Quellen relevant sind, und führt dann durch einen kleinen, ausführbaren Scraper, der eine gerenderte Finanzseite mit Kursdaten über die Crawling API abruft, die Hauptfelder (Preis, Änderung, Volumen und einige Nachbarfelder) parst und sauberes JSON sowie CSV exportiert. Alles hier beschränkt sich auf öffentliche Marktdaten: sachliche Zahlen, die jeder ohne Anmeldung einsehen kann, niemals persönliche oder bezahlpflichtige Inhalte. Der Rechtsteil am Ende ist kein Boilerplate-Text, lesen Sie ihn also, bevor Sie das Skript auf echtes Volumen ansetzen.
Welche öffentlichen Finanzdaten es wert sind, gesammelt zu werden
Bevor Sie Code schreiben, hilft es zu wissen, welche Daten sowohl nützlich als auch fair zu erfassen sind. Öffentliche Finanzdaten lassen sich in einige grobe Kategorien einteilen, die jeweils verschiedene Arten von Analysen antreiben.
- Börsenkurse. Der aktuelle Preis, die Änderung im Tagesverlauf, die prozentuale Veränderung, die Tagesspanne und das Handelsvolumen für eine Aktie, einen ETF oder einen Fonds. Dies sind die am häufigsten verfolgten Daten und der Schwerpunkt des nachfolgenden Praxisbeispiels.
- Indizes. Aggregierte Stände für Benchmarks wie breite Markt- oder Sektorindizes, nützlich zur Messung einer Position gegenüber dem Gesamtmarkt.
- Öffentliche Unternehmensfinanzdaten. Zahlen, die börsennotierte Unternehmen offenlegen müssen: Umsatz, Gewinn, Marktkapitalisierung und die Kennzahlen, die auf einer Unternehmensprofilseite angezeigt werden.
- Öffentliche Marktnachrichten und Schlagzeilen. Redaktionelle Überschriften und Zeitstempel für die Stimmungsanalyse. Erfassen Sie die sachliche Überschrift und den Link, nicht den vollständigen urheberrechtlich geschützten Artikeltext.
Allgemeine Wirtschaftsquellen wie Forbes, Reuters, Bloomberg, MarketWatch und die Financial Times sind gute Lektüre, aber für einen programmatischen Feed möchten Sie eine Seite, die strukturierte Kursfelder bereitstellt, und genau das ist unser Ziel. Für einen breiteren Überblick verweist unser Rundblick auf die besten Finanzdatenanbieter auf die wichtigsten Quellen.
Was Sie bauen werden
Ein Python-Skript, das eine öffentliche Finanz-Kurs-URL für einen Ticker entgegennimmt, die gerenderte Seite über die Crawling API abruft und einen strukturierten Datensatz extrahiert. Die unten aufgeführten Felder sind repräsentative öffentliche Marktfelder; die genauen CSS-Selektoren hängen von der Zielseite ab, die Sie ansprechen, behandeln Sie sie also als Vorlage zum Anpassen.
- Symbol der Ticker, zu dem der Kurs gehört.
- Price der aktuelle Kurspreis.
- Change die absolute Kursänderung am Tag.
- Change percent die Tagesbewegung als Prozentsatz ausgedrückt.
- Volume die Anzahl der gehandelten Aktien.
- Day range das Tagestief und -hoch.
- Market cap die Marktkapitalisierung des Unternehmens, sofern die Seite sie anzeigt.
Warum eine einfache Anfrage bei Finanzseiten scheitert
Rufen Sie eine moderne Finanz-Kurs-URL mit einem einfachen HTTP-Client ab, erhalten Sie in der Regel Status 200, aber fast keine der Zahlen im Body. Zwei Dinge arbeiten gegen Sie. Erstens rendern die meisten Finanzseiten Kurse clientseitig: Preis, Änderung und Volumen werden erst nach dem initialen HTML-Laden per JavaScript gestreamt, sodass die erste Antwort eine leere Hülle ist und das Parsen dieser Hülle nur Seitenchrom statt der gesuchten Zahlen liefert. Zweitens beobachten Finanzseiten automatisierten Datenverkehr genau, weil Live-Kursdaten wertvoll sind. Rechenzentrum-IPs und nicht-browsertypische Anfragemuster werden gedrosselt, IP-gesperrt oder herausgefordert, bevor sie den gerenderten Inhalt erreichen.
Ein funktionierender Finanzscraper benötigt daher zwei Dinge in einer Anfrage: einen Browser, der die Seite tatsächlich rendert, und eine IP, die die Seite als echten Besucher wertet. Sie können das selbst mit einem Headless-Browser plus rotierenden privaten Proxys aufbauen, aber diesen Stack gesund zu halten, ist der größte Teil der Arbeit. Die Crawling API bündelt beides in einem einzigen Aufruf: Sie senden die URL mit einem JavaScript-Token, sie rendert die Seite hinter einer vertrauenswürdigen IP und gibt fertiges HTML zum Parsen zurück. Mehr darüber, warum clientseitig gerenderte Seiten dies benötigen, finden Sie unter JavaScript-Seiten mit Python scrapen.
Crawlbase bietet zwei Token-Typen. Das normale Token ruft statisches HTML ab; das JavaScript-Token (JS) rendert die Seite zunächst in einem echten Browser. Finanzseiten füllen ihre Kursfelder clientseitig, daher benötigen Sie hier das JS-Token. Das normale Token gibt dieselbe leere Hülle zurück, die auch ein einfaches Abrufen liefern würde, mit wenig Nützlichem darin.
Voraussetzungen
Sie benötigen einige Dinge, bevor Sie Code schreiben. Keines davon dauert lange.
Grundlegende Python-Kenntnisse. Sie sollten vertraut damit sein, ein Python-Skript zu schreiben und auszuführen sowie Pakete mit pip zu installieren. Wenn Sie neu in der Parsing-Welt sind, ist der BeautifulSoup-Leitfaden ein guter Begleiter zu diesem Tutorial.
Python 3.8 oder höher. Überprü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 liegt.
Ein Crawlbase-Konto und JS-Token. Registrieren Sie sich, öffnen Sie Ihr Dashboard und kopieren Sie Ihr JavaScript-Token (JS) von der Konto-Dokumentationsseite. Crawlbase enthält bis zu 20.000 kostenlose Anfragen zum Einstieg, was mehr als ausreicht, um diesen Leitfaden durchzuarbeiten, und Sie zahlen nur für erfolgreiche Anfragen. Behandeln Sie das Token wie ein Passwort: Es authentifiziert Ihre Anfragen, halten Sie es also aus der Versionsverwaltung heraus.
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 finance_env source finance_env/bin/activate pip install crawlbase beautifulsoup4
Unter Windows aktivieren Sie die Umgebung mit finance_env\Scripts\activate anstelle der source-Zeile. Zwei Abhängigkeiten erledigen die Arbeit: crawlbase ist der offizielle Client für die Crawling API, und beautifulsoup4 parst das zurückgegebene HTML, sodass Sie einzelne Felder per CSS-Selektor herausziehen können. Sowohl json als auch csv sind in der Standardbibliothek enthalten, sodass für den Exportschritt nichts mehr zu installieren ist.
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 öffentliche Kurs-URL an. Finanzseiten streamen ihre Zahlen asynchron ein, übergeben Sie daher ajax_wait und page_wait, um auf den dynamischen Inhalt zu warten, bevor die Seite aufgezeichnet wird. Die Crawlbase-cb_status (legacy pc_status)-Prüfung vor dem Parsen macht 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://www.example-finance.com/quote/AAPL" html = crawl(quote_url) print(html[:500] if html else "No HTML returned")
Ersetzen Sie quote_url durch die öffentliche Kursseite, die Sie verfolgen möchten. Die beiden Warteoptionen sind bei einer clientseitig gerenderten Finanzseite wichtig: ajax_wait wartet, bis asynchroner Inhalt fertig geladen ist, und page_wait hält eine feste Anzahl von Millisekunden nach dem Laden an, damit spät gestreamte Zahlen vor der Aufzeichnung erscheinen. Fünf Sekunden sind ein vernünftiger Startpunkt; erhöhen Sie den Wert, wenn Felder leer zurückkommen. Führen Sie das Skript aus und Sie sollten echtes Kurs-Markup sehen, nicht die Hülle, die eine einfache Anfrage zurückgibt, was bestätigt, dass das Rendering funktioniert, bevor Sie einen einzigen Selektor schreiben.
Eine Finanz-Kursseite benötigt eine gerenderte Seite hinter einer vertrauenswürdigen IP, in einem Aufruf, was genau das ist, was die oben aufgeführten 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 private IPs und liefert Ihnen fertiges HTML, sodass Sie weder eine Headless-Flotte noch einen eigenen Proxy-Pool betreiben müssen. Richten Sie es zunächst auf eine öffentliche Kursseite im kostenlosen Tarif.
Schritt 2: Die Kursfelder parsen
Mit fertigem HTML laden Sie es in BeautifulSoup und ziehen die Hauptzahlen heraus. Die meisten Finanzseiten kennzeichnen ihre Schlüsselfelder mit stabilen data-*-Attributen oder Feldnamen, die dauerhafter als generierte Klassennamen sind. Jede Abfrage ist gesichert, sodass ein fehlendes Feld None zurückgibt, anstatt den Durchlauf zum Absturz zu bringen.
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 parse_quote(html, symbol, url): soup = BeautifulSoup(html, "html.parser") return { "symbol": symbol, "price": text_of(soup, '[data-field="regularMarketPrice"]'), "change": text_of(soup, '[data-field="regularMarketChange"]'), "change_percent": text_of(soup, '[data-field="regularMarketChangePercent"]'), "volume": text_of(soup, '[data-field="regularMarketVolume"]'), "day_range": text_of(soup, '[data-field="regularMarketDayRange"]'), "market_cap": text_of(soup, '[data-field="marketCap"]'), "link": url, }
Der Helfer text_of fragt ein Element ab und gibt dessen bereinigten Text zurück oder None, wenn das Element fehlt, sodass eine Kursseite, die ein Feld weglässt, die Schleife nicht unterbricht. Die data-field-Werte hier (regularMarketPrice, regularMarketChange, regularMarketVolume und Verwandte) sind typisch für die Art, wie Finanzseiten ihre Live-Zahlen kennzeichnen. Öffnen Sie Ihre Zielseite in den Entwicklertools, finden Sie das Attribut oder die Klasse, die jede Zahl umschließt, und ersetzen Sie die echten Selektoren; die Abfragen in einem Dictionary zu halten macht das zu einer einzeiligen Bearbeitung pro Feld.
Finanzseiten ändern ihr Markup ohne Vorankündigung, und die genauen data-field-Namen variieren von einer Quelle zur anderen. Behandeln Sie die Selektoren hier als Ausgangsmuster, nicht als Vertrag. Wenn ein Feld None zurückgibt, überprüfen Sie die Live-Seite erneut und aktualisieren Sie den Selektor. Regelmäßige Selektor-Wartung ist bei jedem Produktions-Scraper normal, kein Zeichen dafür, dass etwas kaputt ist.
Schritt 3: Das vollständige Skript zusammensetzen
Verbinden Sie nun die Teile zu einem ausführbaren Skript: Iterieren Sie über eine Liste von Tickern, rufen Sie jeden Kurs mit einem kleinen Retry-Wrapper ab und parsen Sie ihn, und exportieren Sie die Datensätze sowohl als JSON als auch als 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, } # Map each ticker to its public quote page URL. QUOTE_BASE = "https://www.example-finance.com/quote/" SYMBOLS = ["AAPL", "MSFT", "GOOGL"] 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 parse_quote(html, symbol, url): soup = BeautifulSoup(html, "html.parser") return { "symbol": symbol, "price": text_of(soup, '[data-field="regularMarketPrice"]'), "change": text_of(soup, '[data-field="regularMarketChange"]'), "change_percent": text_of(soup, '[data-field="regularMarketChangePercent"]'), "volume": text_of(soup, '[data-field="regularMarketVolume"]'), "day_range": text_of(soup, '[data-field="regularMarketDayRange"]'), "market_cap": text_of(soup, '[data-field="marketCap"]'), "link": url, } def save_outputs(records): with open("quotes.json", "w") as f: json.dump(records, f, indent=2) if not records: return with open("quotes.csv", "w", newline="") as f: writer = csv.DictWriter(f, fieldnames=records[0].keys()) writer.writeheader() writer.writerows(records) def main(): records = [] for symbol in SYMBOLS: url = QUOTE_BASE + symbol html = fetch_html(url) if html: records.append(parse_quote(html, symbol, url)) time.sleep(2) save_outputs(records) print(f"Saved {len(records)} quotes") if __name__ == "__main__": main()
Das Skript iteriert über SYMBOLS, erstellt jede Kurs-URL, ruft sie mit dem Retry-Wrapper ab, parst sie zu einem Datensatz und gibt der Schleife mit einem Zwei-Sekunden-Schlaf ein Tempo vor. save_outputs schreibt sowohl JSON als auch CSV unter Verwendung der Schlüssel des ersten Datensatzes als Header, sodass Sie die Daten in der Form vorliegen haben, die Ihr nachgelagertes Tool benötigt. Fügen Sie Ticker zu SYMBOLS hinzu und passen Sie QUOTE_BASE an die öffentliche Quelle an, die Sie ansprechen.
Wie die Ausgabe aussieht
Führen Sie das vollständige Skript aus und erhalten Sie einen sauberen strukturierten Datensatz pro Ticker, bereit für Analysen, eine Datenbank oder eine Tabellenkalkulation. Die nachstehenden Werte sind illustrativ, keine Live-Zahlen.
[ { "symbol": "AAPL", "price": "225.40", "change": "+1.85", "change_percent": "+0.83%", "volume": "48,210,300", "day_range": "223.10 - 226.05", "market_cap": "3.42T", "link": "https://www.example-finance.com/quote/AAPL" }, { "symbol": "MSFT", "price": "418.20", "change": "-2.40", "change_percent": "-0.57%", "volume": "19,840,100", "day_range": "416.00 - 421.30", "market_cap": "3.11T", "link": "https://www.example-finance.com/quote/MSFT" } ]
Das entsprechende CSV enthält dieselben Spalten, eine Zeile pro Ticker, und lässt sich direkt in pandas oder eine beliebige Tabellenkalkulation importieren, um nach Änderung zu sortieren, nach Volumen zu filtern oder Preise über wiederholte Läufe hinweg zu visualisieren. Planen Sie das Skript per Cron und Sie haben eine einfache Zeitreihe öffentlicher Kurse für die Ticker, die Sie beobachten.
Skalierung und Blockierungen vermeiden
Hunderte von Symbolen verfolgen oder dasselbe Set in einem engen Zeitplan abfragen: das ist der Punkt, an dem das Scrapen von Finanzdaten schwieriger wird, weil genau das der Datenverkehr ist, auf den diese Seiten achten. Einige Gewohnheiten halten einen längeren Durchlauf gesund.
- Anfragen drosseln. Eine Watchlist in einer engen Schleife abzufragen ist der schnellste Weg, gedrosselt oder herausgefordert zu werden. Die oben genannten Zwei-Sekunden-Pausen sind ein Minimum, keine Obergrenze; vergrößern Sie sie für umfangreichere Aufgaben und verteilen Sie Ihre Läufe, anstatt jeden Ticker auf einmal abzufeuern.
- Rotation nutzen. Ein Pool privater IPs verteilt Anfragen auf viele echte Nutzeradressen, sodass keine einzelne einen Ratenlimit auslöst. Die Crawling API erledigt das serverseitig; wenn Sie Ihren eigenen Stack betreiben, ist das der Teil, der richtig umgesetzt werden muss.
-
Statuscodes beachten. Ein Durchlauf, der anfängt, Nicht-200-
cb_status-Werte zurückzugeben, signalisiert Ihnen, dass die aktuelle Rate oder IP-Klasse nicht mehr ausreicht. Behandeln Sie das als Signal zum Zurückfahren, nicht als Rauschen zum Ignorieren.
Für größere Aufgaben stellt der async Crawler Anfragen in eine Warteschlange und liefert Ergebnisse an einen Webhook, was sich für das Abfragen vieler Symbole eignet, ohne Verbindungen offen zu halten. Für das breitere Vorgehen siehe Large-Scale Finance Scraping und unser allgemeines Leitfaden zum Scrapen ohne Blockierungen. Wenn Ihr Endziel Wettbewerbs- oder Preisanalysen sind, zeigt unser Leitfaden zu Web Scraping für Price Intelligence, wie Teams diese Art von Feed in Entscheidungen umwandeln.
Ist das Scrapen von Finanzdaten legal?
Ob das Scrapen von Finanzdaten erlaubt ist, hängt von den Nutzungsbedingungen der Quelle, Ihrer Rechtsordnung und dem ab, was Sie mit den Daten machen. Börsenkurse, Indexstände und die Finanzdaten, die ein börsennotiertes Unternehmen offenlegen muss, sind sachliche, öffentliche Informationen, und das Sammeln öffentlicher Fakten für Analysen ist allgemein vertretbar. Aber die Seite, die sie bereitstellt, gehört jemandem, und die meisten Finanzseiten beschränken automatisierten Zugriff und Massensammlung in ihren Bedingungen. Keiner der Code hier ändert das; er macht nur den technischen Teil funktionsfähig. Lesen Sie die Nutzungsbedingungen der Zielseite und deren robots.txt, respektieren Sie alle angegebenen Ratenlimits und behandeln Sie beides als Grenze für das, was Sie sammeln.
Ein paar Grundsätze, die es wert sind, eingehalten zu werden. Sammeln Sie nur öffentliche, nicht bezahlpflichtige Daten: die Kursfelder, Indexstände und offengelegten Finanzdaten, die jeder ohne Konto sehen kann. Scrapen Sie nichts hinter einem Login oder einer Bezahlschranke und umgehen Sie niemals Authentifizierungs- oder Abrechnungsmechanismen, um auf Premium-Daten zuzugreifen, was über öffentliches Sammeln hinaus in unbefugten Zugriff übergeht. Halten Sie Ihr Volumen niedrig genug, dass Sie die Server der Quelle nicht belasten. Und denken Sie daran, dass selbst sachliche Daten Lizenzbedingungen tragen, wenn Sie sie weiterverbreiten: Viele Seiten beziehen Kurse von Börsen und Datenanbietern unter Vereinbarungen, die eine Weiterveröffentlichung einschränken, sodass das Sammeln einer Zahl für die eigene Analyse nicht dasselbe ist wie das Recht, sie weiterzuverkaufen oder zu veröffentlichen. Redaktionelle Inhalte wie vollständige Artikeltexte sind urheberrechtlich geschützt; nehmen Sie für die Stimmungsanalyse die Überschrift und den Link, nicht den Text.
Dieser Leitfaden beschränkt sich auf öffentliche Marktdaten, weil das die Linie ist, die die Arbeit vertretbar hält. Für alles jenseits persönlicher Recherche, insbesondere für Produktions- oder kommerzielle Produkte, verwenden Sie eine offizielle Marktdaten-API oder einen lizenzierten Feed anstelle eines geschickteren Scrapers. Die meisten großen Finanzplattformen bieten ihre eigene Daten-API an oder arbeiten mit etablierten Marktdatenanbietern zusammen, und Börsen lizenzieren Echtzeit- und Verlaufsdaten direkt. Diese Wege geben Ihnen einen stabilen Vertrag, dokumentierte Felder und Verbreitungsrechte, die das Scrapen einer öffentlichen Seite nie gewährt. Verwenden Sie Scraping zum Prototyping und zum Schließen von Lücken; lizenzieren Sie einen Feed, wenn die Daten etwas Echtes antreiben.
Wichtigste Erkenntnisse
- Wissen, was fair zu sammeln ist. Öffentliche Marktdaten (Kurse, Indizes, offengelegte Unternehmensfinanzen, Schlagzeilen) sind sachlich und legitim; persönliche und bezahlpflichtige Daten nicht.
- Finanzseiten werden clientseitig gerendert. Eine einfache Anfrage gibt eine leere Hülle zurück, bei der die Zahlen fehlen, also müssen Sie die Seite rendern, bevor Sie sie 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 Inhalte gewartet wird. - Parsen, iterieren und exportieren. Ordnen Sie jedes Feld einem gesicherten Selektor zu, iterieren Sie über Ihre Ticker mit einem Retry-Wrapper, geben Sie dem Durchlauf kurze Pausen und schreiben Sie JSON und CSV.
- Für Produktion lizenzieren. Respektieren Sie die Nutzungsbedingungen und robots.txt jeder Quelle, beachten Sie, dass Kursdaten Verbreitungsbedingungen tragen, und wechseln Sie für kommerzielles Verwenden zu einer offiziellen Marktdaten-API oder einem lizenzierten Feed.
Häufig gestellte Fragen
Warum gibt eine einfache Anfrage eine Finanzseite ohne Zahlen zurück?
Weil die meisten Finanzseiten ihre Kursfelder clientseitig mit JavaScript laden. Das anfängliche HTML ist eine Hülle, die sich erst füllt, nachdem die Skripte der Seite ausgeführt werden, sodass eine rohe HTTP-Anfrage Status 200 zurückgibt, während Preis, Änderung und Volumen fehlen. Um die Zahlen zu erhalten, müssen Sie die Seite zunächst rendern, was das JS-Token der Crawling API für Sie übernimmt.
Benötige ich das normale Token oder das JS-Token für Finanzseiten?
Das JS-Token. Das normale Token ruft statisches HTML ab, das auf einer clientseitig gerenderten Finanzseite dieselbe leere Hülle ist, die ein einfaches Abrufen zurückgibt. Das JS-Token rendert die Seite in einem echten Browser, bevor es das HTML zurückgibt, sodass die Kursfelder vorhanden sind, wenn BeautifulSoup sie parst.
Welche Finanzdaten kann ich sicher scrapen?
Öffentliche, nicht bezahlpflichtige Marktdaten: Live-Kurse, Indexstände, die Finanzdaten, die ein börsennotiertes Unternehmen offenlegen muss, und sachliche Schlagzeilen mit ihren Links. Bleiben Sie bei Daten, die für jeden Besucher ohne Konto sichtbar sind, sammeln Sie nichts hinter einem Login oder einer Bezahlschranke und vermeiden Sie die Weiterverbreitung urheberrechtlich geschützter Artikeltexte oder lizenzierter Datenfeeds.
Meine Selektoren geben None zurück. Was hat sich geändert?
Fast sicher das Markup der Quelle. Finanzseiten ändern ihre generierten Klassennamen und data-field-Attribute ohne Vorankündigung, und diese Attributnamen unterscheiden sich von einer Quelle zur anderen, sodass Selektoren, die letzten Monat funktionierten, jetzt fehlschlagen können. Überprüfen Sie eine Live-Seite in den Entwicklertools Ihres Browsers erneut und aktualisieren Sie die Selektoren. Regelmäßige Selektor-Wartung ist bei jedem Produktions-Scraper normal.
Sollte ich für die Produktion scrapen oder eine offizielle Marktdaten-API verwenden?
Für alles Kommerzielle oder Produktionsreife verwenden Sie eine offizielle API oder einen lizenzierten Feed. Scraping einer öffentlichen Seite ist hervorragend für Prototypen und zum Füllen von Lücken, aber offizielle APIs bieten Ihnen dokumentierte Felder, stabile Verträge und Verbreitungsrechte, die eine öffentliche Seite nie gewährt. Die meisten großen Finanzplattformen bieten eine Daten-API an oder arbeiten mit etablierten Marktdatenanbietern zusammen.
Wie scrappe ich viele Ticker, ohne blockiert zu werden?
Drosseln Sie Ihre Anfragen mit Pausen, verteilen Sie Läufe anstatt jedes Symbol auf einmal abzufragen, und verlassen Sie sich auf rotierende private IPs, damit keine einzelne Adresse ein Ratenlimit auslöst. Die Crawling API rotiert IPs serverseitig, und der async Crawler stellt große Aufgaben in eine Warteschlange und sendet Ergebnisse an einen Webhook. Beobachten Sie die cb_status-Codes und fahren Sie zurück, wenn sie aufhören, 200 zurückzugeben.
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.
