Kryptowährungsmärkte laufen rund um die Uhr, und öffentliche Marktseiten auf Websites wie CoinGecko veröffentlichen genau die strukturierten Zahlen, die Preisverfolgung, Portfolio-Dashboards und Forschung antreiben: Name und Symbol jeder Münze, der aktuelle Preis, die 24-Stunden-Änderung, das 24-Stunden-Handelsvolumen und die Marktkapitalisierung. Diese Tabelle aktualisiert sich ständig, und sie bei Dutzenden von Coins manuell zu lesen ist langsam und fehleranfällig.
Dieser Leitfaden zeigt Ihnen, wie Sie Krypto-Marktdaten mit Python auf zuverlässige Weise extrahieren. Sie erstellen einen kleinen, lauffähigen Scraper, der die gerenderte Marktseite über die Crawling API abruft, jede Zeile mit BeautifulSoup parst, die Paginierung verwaltet und sauberes JSON und CSV exportiert. Der gesamte Walkthrough beschränkt sich auf öffentliche Marktdaten, die Art, die jeder Besucher ohne Konto sieht, und der Abschnitt zur Rechtslage gegen Ende ist kein Boilerplate.
Was Sie erstellen werden
Ein Python-Skript, das eine öffentliche Krypto-Marktseite abruft, jede Coin-Zeile in der gerenderten Tabelle durchgeht und einen strukturierten Datensatz pro Coin extrahiert. Das durchgehende Beispiel ist die Haupt-Markttabelle auf CoinGecko. Wir ziehen diese Felder heraus:
- Name der vollständige Coin-Name, wie Bitcoin oder Ethereum.
- Symbol das Ticker-Symbol, wie BTC oder ETH.
- Preis der aktuelle Preis in Ihrer gewählten Quotierungswährung.
- Änderung 24h die prozentuale Preisänderung in den letzten 24 Stunden.
- Volumen 24h das gesamte gehandelte Volumen in den letzten 24 Stunden.
- Marktkapitalisierung die gesamte Marktkapitalisierung des Coins.
Warum eine einfache Anfrage auf einer Krypto-Marktseite scheitert
Fordern Sie eine Krypto-Markt-URL mit einem einfachen HTTP-Client an und Sie erhalten Status 200 mit nur einem Bruchteil der Daten im Body. Zwei Dinge arbeiten gegen Sie. Erstens laden diese Markttabellen ihre Zeilen im Browser durch JavaScript, sodass das anfängliche HTML eine dünne Hülle ist, die sich erst füllt, nachdem die Seitenskripte ausgeführt wurden. Parsen Sie diese erste Antwort und Sie erfassen eine leere Tabelle statt der vollständigen Coin-Liste. Zweitens kennzeichnen stark frequentierte Marktseiten automatisierten Traffic schnell: Datacenter-IPs und Anfragemuster, die nicht wie ein echter Browser aussehen, werden ratenbegrenzt oder herausgefordert, bevor sie jemals den gerenderten Inhalt erreichen.
Ein funktionierender Marktdaten-Scraper benötigt also zwei Dinge in einer Anfrage: einen Browser, der die Seite rendert, und eine IP, die die Plattform als echten Besucher liest. Sie können das selbst mit einem Headless-Browser plus einem Pool rotierender Residential-Proxys zusammenstellen, aber diese zu verknüpfen und funktionsfähig zu halten, ist der Großteil der Arbeit. Die Crawling API kombiniert 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 zurück, das Sie parsen können.
Crawlbase bietet zwei Token-Typen an. Der normale Token ruft statisches HTML ab; der JavaScript-Token (JS) rendert die Seite zuerst in einem echten Browser. Eine Krypto-Markttabelle füllt ihre Zeilen clientseitig, daher benötigen Sie hier den JS-Token. Der normale Token gibt dieselbe dünne Hülle zurück, die ein einfacher Abruf liefern würde, und es gibt darin wenig Nützliches zu parsen.
Voraussetzungen
Sie benötigen einige Dinge, bevor Sie Code schreiben können. Keines davon dauert lange.
Grundlegendes Python. Sie sollten in der Lage sein, ein Python-Skript zu schreiben, auszuführen und Pakete mit pip zu installieren. Wenn Sie neu bei der Parse-Seite 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. Wenn 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. Registrieren Sie sich, öffnen Sie Ihr Dashboard und kopieren Sie Ihren JavaScript-Token (JS) von der Kontodokumentationsseite. Crawlbase enthält bis zu 20.000 kostenlose Anfragen zum Start, was für die Arbeit durch diesen Leitfaden mehr als ausreichend ist. Behandeln Sie den Token wie ein Passwort: Er authentifiziert Ihre Anfragen, halten Sie ihn also aus der Versionskontrolle 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 crypto_env source crypto_env/bin/activate pip install crawlbase beautifulsoup4
Aktivieren Sie unter Windows die Umgebung mit crypto_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 werden mit der Standardbibliothek geliefert, sodass für den Exportschritt nichts mehr installiert werden muss.
Schritt 1: Eine gerenderte Marktseite abrufen
Beginnen Sie damit, eine fertige Seite zu laden. Importieren Sie die CrawlingAPI-Klasse, initialisieren Sie sie mit Ihrem JS-Token und fordern Sie die Markt-URL an. Die Tabelle lädt asynchron, also übergeben Sie ajax_wait und page_wait, um auf den dynamischen Inhalt zu warten, bevor die Seite erfasst wird. Die Überprüfung des Crawlbase-cb_status (legacy pc_status) vor dem Parsen macht Fehler laut statt still.
from crawlbase import CrawlingAPI api = CrawlingAPI({"token": "YOUR_CRAWLBASE_JS_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__": market_url = "https://www.coingecko.com/" html = crawl(market_url) print(html[:500] if html else "No HTML returned")
Die zwei Wartoptionen sind bei einem clientseitig gerenderten Ziel wichtig. ajax_wait teilt der API mit, auf das Laden asynchroner Inhalte zu warten, und page_wait hält für eine feste Anzahl von Millisekunden nach dem Laden an, damit sich die live-aktualisierenden Zeilen setzen, bevor die Seite erfasst wird. Fünf Sekunden sind ein vernünftiger Ausgangspunkt; erhöhen Sie diesen Wert, wenn die Tabelle wenige Zeilen zurückgibt. Führen Sie python crypto_scraper.py aus und Sie sollten echtes Markt-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 Krypto-Marktseite benötigt eine gerenderte Tabelle hinter einer vertrauenswürdigen IP in einem Aufruf, was genau das ist, was die obigen Optionen ajax_wait und page_wait einrichten. Die Crawling API nimmt einen JS-Token, führt die Seite in einem echten Browser aus, rotiert serverseitig durch Residential-IPs und gibt Ihnen fertiges HTML, sodass Sie selbst keine Headless-Fleet und keinen Proxy-Pool betreiben müssen. Testen Sie es zuerst auf der öffentlichen Marktseite im kostenlosen Kontingent.
Schritt 2: Eine Coin-Zeile parsen
Die Marktseite ist eine Tabelle, in der jedes tr ein Coin ist. Laden Sie das gerenderte HTML in BeautifulSoup und lesen Sie die Zellen, die Sie interessieren. Die Spalten sitzen in einer bekannten Reihenfolge, und Name und Symbol befinden sich zusammen in der Coin-Zelle, daher hält ein kleines Hilfsprogramm, das jedes Feld auf seine Zelle abbildet, das Parsen lesbar. Jede Suche ist gesichert, sodass ein fehlendes Feld None zurückgibt, anstatt den Lauf zum Absturz zu bringen.
from bs4 import BeautifulSoup ROW_SELECTOR = 'table[data-coin-table-target="table"] > tbody > tr' def text_of(node, selector): el = node.select_one(selector) return el.get_text(strip=True) if el else None def parse_row(row): return { "name": text_of(row, 'td[data-view-component="true"] a span.tw-text-gray-700'), "symbol": text_of(row, 'td[data-view-component="true"] a span.tw-text-gray-500'), "price": text_of(row, 'td[data-target="price.price"]'), "change_24h": text_of(row, 'td.tw-text-right span[data-target="price-change-percentage-24h"]'), "volume_24h": text_of(row, 'td.tw-text-right span[data-coin-table-target="totalVolume"]'), "market_cap": text_of(row, 'td.tw-text-right span[data-coin-table-target="marketCap"]'), }
Das Hilfsprogramm text_of fragt ein Element innerhalb einer Zeile ab und gibt dessen bereinigten Text zurück oder None, wenn das Element fehlt, sodass ein Coin, der ein Feld auslässt, nicht die Schleife unterbricht. Die Coin-Zelle enthält sowohl den vollständigen name als auch das symbol in zwei verschachtelten Spans, während Preis, 24-Stunden-Änderung, Volumen und Marktkapitalisierung jeweils in ihrer eigenen rechtsbündigen Zelle sitzen. Jede Zeile als Einheit zu lesen hält jedes Feld korrekt dem richtigen Coin zugeordnet, auch wenn sich eine Spalte verschiebt.
Die generierten Klassennamen und data-target-Attribute einer Marktseite ändern sich ohne Vorankündigung. Behandeln Sie die hier aufgeführten Selektoren als Startvorlage, nicht als Vertrag. Wenn ein Feld None zurückkommt, überprüfen Sie die Live-Seite in den Entwicklertools Ihres Browsers und aktualisieren Sie den Selektor. Regelmäßige Selektor-Wartung ist für jeden produktiven Scraper normal, kein Zeichen dafür, dass etwas kaputt ist.
Schritt 3: Alle Zeilen auf der Seite durchgehen
Mit einem Zeilen-Parser in der Hand wählen Sie alle Zeilen in der Tabelle aus und bilden jede auf einen Datensatz ab. Ein kleiner Wiederholungsversuchs-Wrapper um den Abruf verhindert, dass eine einzelne langsame Anfrage den Lauf beendet.
import time 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: print(f"Retrying ({attempt + 1}/{max_retries})...") time.sleep(1) print(f"Unable to fetch {page_url}") return None def parse_market(html): soup = BeautifulSoup(html, "html.parser") rows = soup.select(ROW_SELECTOR) return [parse_row(r) for r in rows if r.select_one('td[data-target="price.price"]')]
fetch_html wiederholt einen fehlgeschlagenen Abruf bis zu zweimal mit einer kurzen Pause und gibt das HTML bei Erfolg zurück, oder None, sobald es aufgibt. parse_market wählt alle Coin-Zeilen aus und bildet jede auf einen Datensatz ab, wobei Zeilen ohne Preis-Zelle übersprungen werden, sodass Abstandshalter- oder Kopfzeilen keine leeren Einträge erzeugen. Das Ergebnis ist eine saubere Liste von Coin-Dictionaries von einer Seite.
Schritt 4: Paginierung über den Markt verwalten
Eine Seite ist ein Ausschnitt des gesamten Marktes. CoinGecko paginiert mit einem ?page=-Abfrageparameter, sodass Sie jede Seite bis zu einer Obergrenze durchgehen und Zeilen von allen sammeln. Das Begrenzen des Crawls mit einem max_pages-Argument verhindert, dass ein großer Markt außer Kontrolle gerät, und ein kurzer Sleep zwischen Seiten verteilt den Lauf, damit Sie die Seite nicht überlasten.
def collect_all_coins(base_url, max_pages): records = [] for page in range(1, max_pages + 1): page_url = f"{base_url}?page={page}" html = fetch_html(page_url) if not html: continue page_coins = parse_market(html) if not page_coins: break records.extend(page_coins) print(f"Page {page}: {len(page_coins)} coins") time.sleep(2) return records
collect_all_coins fordert jede Seite der Reihe nach an, parst ihre Zeilen und stoppt früh, wenn eine Seite keine Coins zurückgibt, was passiert, sobald Sie die letzte befüllte Seite überschreiten. Das time.sleep(2) zwischen Seiten verteilt die Anfragen. Passen Sie max_pages an, um zu steuern, wie tief in die Marktrangliste Sie gehen; die erste Seite allein deckt bereits die größten Coins nach Marktkapitalisierung ab.
Schritt 5: Das vollständige Skript zusammenstellen
Verbinden Sie jetzt die Teile in einem lauffähigen Skript: Coins seitenübergreifend sammeln und dann die Datensätze in JSON und CSV exportieren.
import csv import json import time from crawlbase import CrawlingAPI from bs4 import BeautifulSoup api = CrawlingAPI({"token": "YOUR_CRAWLBASE_JS_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, } ROW_SELECTOR = 'table[data-coin-table-target="table"] > tbody > tr' 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(node, selector): el = node.select_one(selector) return el.get_text(strip=True) if el else None def parse_row(row): return { "name": text_of(row, 'td[data-view-component="true"] a span.tw-text-gray-700'), "symbol": text_of(row, 'td[data-view-component="true"] a span.tw-text-gray-500'), "price": text_of(row, 'td[data-target="price.price"]'), "change_24h": text_of(row, 'td.tw-text-right span[data-target="price-change-percentage-24h"]'), "volume_24h": text_of(row, 'td.tw-text-right span[data-coin-table-target="totalVolume"]'), "market_cap": text_of(row, 'td.tw-text-right span[data-coin-table-target="marketCap"]'), } def parse_market(html): soup = BeautifulSoup(html, "html.parser") rows = soup.select(ROW_SELECTOR) return [parse_row(r) for r in rows if r.select_one('td[data-target="price.price"]')] def collect_all_coins(base_url, max_pages): records = [] for page in range(1, max_pages + 1): html = fetch_html(f"{base_url}?page={page}") if not html: continue page_coins = parse_market(html) if not page_coins: break records.extend(page_coins) time.sleep(2) return records def save_outputs(records): with open("crypto_market.json", "w") as f: json.dump(records, f, indent=2) if not records: return with open("crypto_market.csv", "w", newline="") as f: writer = csv.DictWriter(f, fieldnames=records[0].keys()) writer.writeheader() writer.writerows(records) def main(): market_url = "https://www.coingecko.com/" coins = collect_all_coins(market_url, max_pages=2) save_outputs(coins) print(f"Saved {len(coins)} coins") if __name__ == "__main__": main()
Das Skript sammelt Coin-Datensätze über bis zu zwei Marktseiten und verteilt die Schleife mit einem zweisekündigen Sleep. save_outputs schreibt sowohl eine JSON-Datei als auch eine CSV unter Verwendung der Schlüssel des ersten Datensatzes als Header, sodass Sie die Daten in der Form haben, die Ihr nachgelagertes Tool möchte. Passen Sie max_pages und die Markt-URL an, wie viel der Rangliste Sie wollen.
Wie die Ausgabe aussieht
Führen Sie das vollständige Skript mit python crypto_scraper.py aus und Sie erhalten einen sauberen strukturierten Datensatz pro Coin, bereit für Analysen, eine Datenbank oder eine Tabellenkalkulation.
[ { "name": "Bitcoin", "symbol": "BTC", "price": "$86,650.00", "change_24h": "2.4%", "volume_24h": "$28,540,118,233", "market_cap": "$1,712,884,991,402" }, { "name": "Ethereum", "symbol": "ETH", "price": "$2,015.42", "change_24h": "1.1%", "volume_24h": "$14,902,551,870", "market_cap": "$243,118,440,905" } ]
Das passende CSV trägt dieselben Spalten, eine Zeile pro Coin, was direkt in pandas oder eine Tabellenkalkulation zum Sortieren nach Marktkapitalisierung, Filtern nach 24-Stunden-Änderung oder zum Erstellen von Diagrammen des Volumens fällt. Die obigen Werte sind illustrativ; Live-Preise und Prozentsätze ändern sich ständig, was der eigentliche Grund ist, warum Sie sie nach einem Zeitplan abrufen, nicht nur einmal.
Im Maßstab entsperrt bleiben
Selbst mit gehandhabtem Rendering beobachtet eine stark frequentierte Marktseite Scraper-ähnlichen Traffic. Einige Gewohnheiten halten einen längeren Lauf gesund, und sie gelten für jedes schwierige kommerzielle Ziel.
- Pacing Ihrer Anfragen. Seiten in einer engen Schleife zu hämmern ist der schnellste Weg, gedrosselt oder herausgefordert zu werden. Die obigen zweisekündigen Sleeps sind der Boden, nicht die Decke; verbreitern Sie sie für größere Jobs und vermeiden Sie es, dieselbe Seite in einem engen Zyklus abzurufen.
- Auf Rotation setzen. Ein Pool von Residential-IPs verteilt Anfragen auf viele echte Nutzeradressen, sodass keine einzelne ein Ratenlimit auslöst. Die Crawling API übernimmt das für Sie; wenn Sie Ihren eigenen Stack verwenden, ist dies der Teil, den Sie richtig machen müssen.
-
Statuscodes lesen. Ein Lauf, der beginnt, Nicht-200-
cb_status-Werte zurückzugeben, signalisiert Ihnen, dass die aktuelle Rate oder IP-Tier nicht mehr ausreicht. Behandeln Sie das als Signal zum Zurückhalten, nicht als Rauschen zum Ignorieren.
Für größere Crawls stellt der asynchrone Crawler Anfragen in eine Warteschlange und liefert Ergebnisse an einen Webhook, was für das Ausführen vieler Marktseiten ohne offene Verbindungen geeignet ist. Für das breitere Playbook lesen Sie wie man Websites ohne Blockierung scrapt. Wenn Sie diese Daten in einen Monitoring-Workflow einspeisen möchten, überträgt sich derselbe Ansatz auf Preisintelligenz, und ein Begleitleitfaden behandelt das Scrapen von Kryptopreisen von CoinMarketCap, wenn Sie eine zweite Quelle wollen.
Ist es legal, Krypto-Marktdaten zu scrapen?
Ob das Scrapen einer Krypto-Marktseite erlaubt ist, hängt von den Nutzungsbedingungen dieser Seite, Ihrer Gerichtsbarkeit und dem ab, was Sie mit den Daten tun. Seiten wie CoinGecko veröffentlichen ihre Markttabellen offen, und die Zahlen selbst (Preis, 24-Stunden-Änderung, Volumen, Marktkapitalisierung) sind faktische öffentliche Marktdaten und keine personenbezogenen Daten, was den Feldsatz in diesem Leitfaden aus Datenschutzsicht risikoarm macht. Das befreit Sie nicht von den Bedingungen der Seite: Die meisten Marktseiten schränken den starken automatisierten Zugriff in ihren Nutzungsbedingungen ein, also lesen Sie diese Bedingungen und die robots.txt der Seite und behandeln Sie beide als Grenze für das, was und wie viel Sie sammeln.
Einige Leitlinien, die es wert sind, einzuhalten: Sammeln Sie nur öffentliche Marktdaten, die Zahlen, die jeder Besucher ohne Konto sieht, und halten Sie Ihr Anfragevolumen so niedrig, dass Sie die Server der Seite nicht belasten. Scrapen Sie nichts hinter einem Login, einer Paywall oder einem Konto, und sammeln oder erstellen Sie keine Profile rund um personenbezogene Daten, was außerhalb des Rahmens hier liegt und DSGVO- und CCPA-Verpflichtungen ins Spiel bringen würde. Respektieren Sie das Urheberrecht an redaktionellen Inhalten, die eine Marktseite neben ihren Tabellen veröffentlicht: Die Preiszahlen sind Fakten, aber eine schriftliche Marktanalyse gehört Ihnen nicht zur Weiterveröffentlichung.
Für den produktiven Einsatz ist die offiziell sauberere Methode die offizielle API. Die meisten Krypto-Marktseiten, einschließlich CoinGecko, bieten eine öffentliche API an, die dieselben Preis-, Volumen- und Marktkapitalisierungsfelder als strukturiertes JSON unter klaren Ratenbeschränkungen und Bedingungen zurückgibt. Eine API ist stabiler als HTML-Selektoren, bricht nicht, wenn sich das Seitenlayout ändert, und hält Sie innerhalb der erlaubten Nutzungsregeln des Anbieters. Scrapen Sie die gerenderte Seite für ein schnelles Einmalprojekt oder ein Feld, das die API nicht bereitstellt; greifen Sie auf die offizielle API oder einen lizenzierten Datenfeed zurück, wenn Sie etwas Dauerhaftes oder Kommerzielles aufbauen.
Wichtigste Erkenntnisse
- Markttabellen sind clientseitig gerendert. Eine einfache Anfrage gibt eine dünne Hülle mit einer leeren Tabelle zurück, sodass Sie die Seite rendern müssen, bevor Sie sie parsen.
-
Sie benötigen Rendering und eine vertrauenswürdige IP zusammen. Die Crawling API mit einem JS-Token macht beides in einem Aufruf;
ajax_waitundpage_waitsteuern, wie lange sie auf Inhalte wartet. -
Zeile für Zeile parsen. Jedes
trals einen Coin lesen und seine Zellen auf Name, Symbol, Preis, 24-Stunden-Änderung, 24-Stunden-Volumen und Marktkapitalisierung abbilden, damit jedes Feld korrekt dem richtigen Coin zugeordnet bleibt. -
Paginieren und exportieren. Den
?page=-Abfrageparameter bis zu einer Obergrenze durchgehen, den Lauf mit kurzen Sleeps verteilen und die Datensätze in JSON und CSV schreiben. - Die offizielle API für den produktiven Einsatz bevorzugen. Bei öffentlichen Marktdaten bleiben, ToS und robots.txt der Seite respektieren und die öffentliche API des Anbieters oder einen lizenzierten Feed für alles Dauerhafte oder Kommerzielle verwenden.
Häufig gestellte Fragen
Warum gibt eine einfache Anfrage eine leere Krypto-Tabelle zurück?
Weil die Marktseite ihre Zeilen clientseitig mit JavaScript lädt. Das anfängliche HTML ist eine Hülle, die sich erst füllt, nachdem die Skripte in einem Browser ausgeführt wurden, sodass eine rohe HTTP-Anfrage Status 200 mit leerer Tabelle zurückgibt. Um die Zeilen zu erhalten, müssen Sie die Seite zuerst rendern, was der JS-Token der Crawling API für Sie übernimmt.
Benötige ich den normalen Token oder den JS-Token hier?
Den JS-Token. Der normale Token ruft statisches HTML ab, was auf einer Krypto-Marktseite dieselbe leere Tabellenhülle ist, die ein einfacher Abruf zurückgibt. Der JS-Token rendert die Seite zuerst in einem echten Browser, sodass die Coin-Zeilen vorhanden sind, wenn BeautifulSoup sie parst.
Welche Felder kann ich von einer Marktseite extrahieren?
Die öffentlichen Pro-Coin-Zahlen: den Namen und das Ticker-Symbol, den aktuellen Preis, den 24-Stunden-Änderungsprozentsatz, das 24-Stunden-Handelsvolumen und die Marktkapitalisierung. Bleiben Sie bei Daten, die für jeden Besucher ohne Konto sichtbar sind, und behandeln Sie schriftliche Marktanalysen oder redaktionelle Inhalte als urheberrechtlich geschützt, nicht als etwas, das weiterveröffentlicht werden soll.
Meine Selektoren geben None zurück. Was hat sich geändert?
Mit großer Wahrscheinlichkeit das Markup der Seite. Generierte Klassennamen und data-target-Attribute (die data-coin-table-target-Hooks, die rechtsbündigen Zellenklassen) ändern sich ohne Vorankündigung, sodass letzte Woche funktionierende Selektoren brechen können. Überprüfen Sie eine Live-Seite in den Entwicklertools Ihres Browsers und aktualisieren Sie die Selektoren. Regelmäßige Selektor-Wartung ist für jeden produktiven Scraper normal.
Soll ich die Seite scrapen oder die offizielle API verwenden?
Für alles Dauerhafte oder Kommerzielle bevorzugen Sie die offizielle API. Die meisten Krypto-Marktseiten, einschließlich CoinGecko, stellen eine öffentliche API bereit, die Preis-, Volumen- und Marktkapitalisierungsdaten als strukturiertes JSON unter klaren Bedingungen und Ratenbeschränkungen zurückgibt, was stabiler als das Parsen von HTML ist. Das Scrapen der gerenderten Seite eignet sich am besten für ein schnelles Einmalprojekt oder ein Feld, das die API nicht bereitstellt.
Wie oft sollte ich Krypto-Marktdaten erfassen?
Das hängt von Ihrem Anwendungsfall ab. Für ein nahezu Echtzeit-Dashboard können Sie alle paar Minuten abrufen; für die Trendforschung sind stündliche oder tägliche Snapshots in der Regel ausreichend. Was auch immer der Rhythmus ist, paced Ihre Anfragen und respektieren Sie die Ratenbeschränkungen der Seite, damit ein häufiger Zeitplan nicht zu Scraper-ähnlichem Traffic wird, den die Seite blockiert.
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.
