Crunchbase ist eines der größten Verzeichnisse für Unternehmens- und Startup-Daten im Web. Öffentliche Unternehmensprofile enthalten strukturierte Informationen, die Marktforschung, Wettbewerbsanalyse, Vertriebsprospektion und Finanzierungsrecherche antreiben: Unternehmensname, Beschreibung, Standort, Mitarbeiterzahl, Website, Ranking und Gründer. Das Problem: Crunchbase rendert diese Profile clientseitig und bekämpft automatisierten Datenverkehr hart, sodass eine einfache HTTP-Anfrage nur eine leere Hülle anstelle der gewünschten Daten liefert.
Dieser Leitfaden zeigt Ihnen, wie Sie Crunchbase zuverlässig mit Python scrapen. Sie bauen einen kleinen, lauffähigen Scraper, der ein gerendertes Unternehmensprofil über die Crawling API abruft, die gewünschten Felder mit BeautifulSoup parst und saubere strukturierte Ausgaben erzeugt. Die gesamte Anleitung bleibt auf öffentliche Profildaten beschränkt; der Abschnitt zur Rechtslage am Ende ist kein Standardtext, lesen Sie ihn also, bevor Sie diesen Code in großem Umfang einsetzen.
Was Sie bauen werden
Ein Python-Skript, das eine öffentliche Crunchbase-Unternehmens-URL entgegennimmt, das gerenderte HTML über die Crawling API abruft und einen strukturierten Datensatz des Unternehmens extrahiert. Als laufendes Beispiel wählen wir ein öffentliches Organisationsprofil und ziehen diese Felder:
- Title der Unternehmensname, zum Beispiel „OpenAI".
- Description eine kurze Zusammenfassung der Unternehmenstätigkeit.
- Location der Unternehmenssitz, etwa „San Francisco, California".
- Employees die Mitarbeiterband, zum Beispiel „1001-5000".
- Company URL der Link zur eigenen Website des Unternehmens.
- Rank die Position des Unternehmens im Crunchbase-Ranking.
- Founded das Gründungsjahr des Unternehmens.
- Founders die Personen, die das Unternehmen gegründet haben.
Warum ein einfacher Abruf bei Crunchbase scheitert
Wenn Sie eine Crunchbase-Organisations-URL mit einem einfachen HTTP-Client anfordern, erhalten Sie eine Antwort mit Status 200 und fast keine der Profildaten im Body. Zwei Dinge arbeiten gegen Sie. Erstens rendert Crunchbase seinen Profilinhalt im Browser mit JavaScript, sodass das initiale HTML nur eine Hülle ist, die sich erst nach dem Ausführen der Seitenskripte füllt. Zweitens erkennt Crunchbase automatisierten Datenverkehr schnell: Datacenter-IPs und Anfragemuster, die nicht wie ein echter Browser aussehen, werden herausgefordert oder gesperrt, bevor sie jemals den gerenderten Inhalt erreichen.
Ein funktionierender Crunchbase-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 erkennt. Sie können das selbst mit einem Headless-Browser plus einem Pool rotierender Wohnproxys zusammenstellen, aber diese zusammenzufügen und funktionsfähig zu halten, ist der Großteil der Arbeit. Die Crawling API fasst beides in einem einzigen Aufruf zusammen: Sie übergeben ihr die URL mit einem JavaScript-Token, sie rendert die Seite hinter einer vertrauenswürdigen IP und gibt fertiges HTML zum Parsen zurück.
Crawlbase bietet zwei Token-Typen an. Der normale Token ruft statisches HTML ab; der JavaScript (JS)-Token rendert die Seite zuerst in einem echten Browser. Crunchbase wird clientseitig gerendert, daher benötigen Sie hier den JS-Token. Bei Verwendung des normalen Tokens erhalten Sie dieselbe leere Hülle wie bei einem einfachen Abruf, aus der nichts zu parsen ist.
Voraussetzungen
Vor dem Schreiben von Code müssen einige Dinge vorhanden sein. Keines davon nimmt viel Zeit in Anspruch.
Python-Grundkenntnisse. Sie sollten in der Lage sein, ein Python-Skript zu schreiben und auszuführen sowie Pakete mit pip zu installieren. Wenn Sie neu in der Sprache sind, bringen die offizielle Python-Dokumentation und ein Einsteigerkurs Sie auf das Niveau, das dieses Tutorial voraussetzt.
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.
Ein Crawlbase-Konto und ein JS-Token. Registrieren Sie sich, öffnen Sie Ihr Dashboard und kopieren Sie Ihren JavaScript (JS)-Token von der Kontodokumentationsseite. Behandeln Sie den Token wie ein Passwort: Er authentifiziert Ihre Anfragen, halten Sie ihn daher aus der Versionskontrolle heraus.
Projekt einrichten
Erstellen Sie eine virtuelle Umgebung, damit Projektabhängigkeiten isoliert bleiben, und installieren Sie dann die zwei Bibliotheken, die der Scraper benötigt.
python --version python -m venv crunchbase_env source crunchbase_env/bin/activate pip install crawlbase beautifulsoup4
Aktivieren Sie die Umgebung unter Windows mit crunchbase_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 parst das zurückgegebene HTML, sodass Sie einzelne Felder per CSS-Selektor extrahieren können.
Schritt 1: Das gerenderte Profil abrufen
Beginnen Sie damit, die fertige Seite abzurufen. Importieren Sie die CrawlingAPI-Klasse, initialisieren Sie sie mit Ihrem JS-Token und fordern Sie die Unternehmens-URL an. Das Prüfen des Statuscodes vor dem Parsen hält Fehler laut statt still.
from crawlbase import CrawlingAPI api = CrawlingAPI({"token": "YOUR_CRAWLBASE_JS_TOKEN"}) def crawl(page_url): options = {"ajax_wait": "true", "page_wait": 5000} response = api.get(page_url, options) if response["status_code"] == 200: return response["body"].decode("utf-8") print(f"Request failed: {response['status_code']}") return None if __name__ == "__main__": page_url = "https://www.crunchbase.com/organization/openai" html = crawl(page_url) print(html[:500] if html else "No HTML returned")
Die zwei Wait-Optionen sind für ein clientseitig gerendertes Ziel wie dieses wichtig. ajax_wait weist die API an, auf das Fertigladen asynchroner Inhalte zu warten, und page_wait hält für eine feste Anzahl von Millisekunden nach dem Laden an, sodass spät gerenderte Elemente erscheinen, bevor die Seite erfasst wird. Fünf Sekunden sind ein vernünftiger Ausgangspunkt; erhöhen Sie den Wert, wenn die Profilfelder leer zurückkommen. Führen Sie das Skript mit python scraper.py aus und Sie sollten echtes Profil-Markup sehen, nicht die leere Hülle, die ein einfacher Abruf zurückgibt. Das bestätigt, dass das Rendering funktioniert, bevor Sie einen einzigen Selektor schreiben.
Crunchbase benötigt eine gerenderte Seite hinter einer vertrauenswürdigen IP, in einem Aufruf. Die Crawling API nimmt einen JS-Token, führt die Seite in einem echten Browser aus, rotiert serverseitig durch Wohn-IPs und liefert Ihnen fertiges HTML, sodass Sie keinen eigenen Headless-Browser-Fuhrpark und Proxy-Pool betreiben müssen. Richten Sie es zunächst auf ein öffentliches Unternehmensprofil in der kostenlosen Stufe aus.
Schritt 2: Unternehmensfelder mit BeautifulSoup parsen
Mit gerendetrem HTML laden Sie es in BeautifulSoup und ziehen jedes Feld über seinen Selektor. Crunchbase-Profile legen die Kerndetails in einer vorhersehbaren Struktur dar, sodass Sie Titel, Beschreibung, Standort, Mitarbeiterzahl, Website, Rang, Gründungsjahr und Gründer auf individuelle Selektoren abbilden können. Verpacken Sie die gesamte Extraktion in ein try/except, sodass ein fehlender Wert den Lauf nicht zum Absturz bringt.
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_company(html): soup = BeautifulSoup(html, "html.parser") rows = ".section-content-wrapper li.ng-star-inserted" company_link = soup.select_one(f"{rows}:nth-of-type(5) a[role='link']") return { "title": text_of(soup, "h1.profile-name"), "description": text_of(soup, "span.description"), "location": text_of(soup, f"{rows}:nth-of-type(1)"), "employees": text_of(soup, f"{rows}:nth-of-type(2)"), "company_url": company_link["href"] if company_link else None, "rank": text_of(soup, f"{rows}:nth-of-type(6) span"), "founded": text_of(soup, ".text_and_value li:nth-of-type(4) field-formatter"), "founders": text_of(soup, ".text_and_value li:nth-of-type(5) field-formatter"), }
Der text_of-Helfer erledigt zwei nützliche Dinge auf einmal: Er fragt ein einzelnes Element ab und gibt None zurück, wenn das Element fehlt, anstatt bei einem .get_text()-Aufruf auf nichts zu werfen. Das macht die Extraktion robust, wenn ein Feld bei einem bestimmten Profil fehlt, was häufig vorkommt, da nicht jedes Unternehmen einen Rang oder eine Website angibt. Die Unternehmens-URL wird aus dem href eines Ankers statt aus seinem Text gelesen und daher separat behandelt.
Crunchbase-Klassennamen (die Angular-ng-star-inserted-Marker, die field-formatter-Elemente und die Abschnitts-Wrapper) ändern sich ohne Vorankündigung. Behandeln Sie die obigen Selektoren als Ausgangspunkt, nicht als Vertrag. Wenn ein Feld als None zurückkommt, überprüfen Sie das Live-Profil in den Entwicklertools Ihres Browsers und aktualisieren Sie den Selektor. Regelmäßige Selektor-Wartung ist für jeden produktiven Scraper normal und kein Zeichen dafür, dass etwas kaputt ist.
Schritt 3: Alles zusammenführen
Verknüpfen Sie jetzt Abruf und Parsing in einem lauffähigen Skript. Rufen Sie das gerenderte HTML ab, übergeben Sie es an den Parser und geben Sie den strukturierten Datensatz aus.
import json from crawlbase import CrawlingAPI from bs4 import BeautifulSoup api = CrawlingAPI({"token": "YOUR_CRAWLBASE_JS_TOKEN"}) def crawl(page_url): options = {"ajax_wait": "true", "page_wait": 5000} response = api.get(page_url, options) if response["status_code"] == 200: return response["body"].decode("utf-8") print(f"Request failed: {response['status_code']}") return None def text_of(soup, selector): el = soup.select_one(selector) return el.get_text(strip=True) if el else None def scrape_company(html): soup = BeautifulSoup(html, "html.parser") rows = ".section-content-wrapper li.ng-star-inserted" company_link = soup.select_one(f"{rows}:nth-of-type(5) a[role='link']") return { "title": text_of(soup, "h1.profile-name"), "description": text_of(soup, "span.description"), "location": text_of(soup, f"{rows}:nth-of-type(1)"), "employees": text_of(soup, f"{rows}:nth-of-type(2)"), "company_url": company_link["href"] if company_link else None, "rank": text_of(soup, f"{rows}:nth-of-type(6) span"), "founded": text_of(soup, ".text_and_value li:nth-of-type(4) field-formatter"), "founders": text_of(soup, ".text_and_value li:nth-of-type(5) field-formatter"), } def main(): page_url = "https://www.crunchbase.com/organization/openai" html = crawl(page_url) if not html: return data = scrape_company(html) print(json.dumps(data, indent=2)) if __name__ == "__main__": main()
Wie die Ausgabe aussieht
Führen Sie das vollständige Skript mit python scraper.py aus und Sie erhalten einen sauberen strukturierten Datensatz für das Unternehmen, bereit zum Schreiben in JSON, CSV oder eine Datenbank.
{ "title": "OpenAI", "description": "OpenAI is an AI research and deployment company.", "location": "San Francisco, California, United States", "employees": "1001-5000", "company_url": "https://openai.com", "rank": "5", "founded": "2015", "founders": "Elon Musk, Greg Brockman, Ilya Sutskever, Sam Altman" }
Auf viele Unternehmen skalieren
Ein Profil ist ein Demo; ein echter Auftrag läuft über eine Liste von Unternehmen. Die Struktur bleibt dieselbe: Eine Liste von Organisations-URLs führen, jede über die Crawling API abrufen, mit derselben Funktion parsen und die Zeilen sammeln. Da jedes Profil dieselbe Struktur hat, funktioniert der bereits geschriebene Parser ohne Änderungen auf allen Profilen.
companies = [ "https://www.crunchbase.com/organization/openai", "https://www.crunchbase.com/organization/anthropic", ] results = [] for url in companies: html = crawl(url) if html: results.append(scrape_company(html)) with open("companies.json", "w") as f: json.dump(results, f, indent=2)
Um Unternehmens-URLs in großem Umfang zu finden, können Sie Crunchbase's öffentliche Such- und Discovery-Seiten mit demselben Fetch-then-Parse-Muster scrapen, die Organisations-Links sammeln und dann jede einzeln aufrufen. Halten Sie das Volumen jedoch vernünftig und respektieren Sie die unten beschriebenen Ratenlimits.
Nicht blockiert werden
Selbst wenn das Rendering gehandhabt wird, achtet Crunchbase auf Scraper-artigen Datenverkehr. Einige Gewohnheiten halten einen Lauf gesund und gelten für jedes schwierige kommerzielle Ziel.
- Anfragen dosieren. Profile in einer engen Schleife zu hämmern ist der schnellste Weg zu Drosselung. Verteilen Sie Anfragen und variieren Sie Ihre Ziele, anstatt einen Pfad mit voller Geschwindigkeit zu crawlen.
- Rotation nutzen. Ein Pool von Wohn-IPs verteilt Anfragen über viele echte Nutzerkennzeichnungen, sodass keine einzelne ein Ratenlimit auslöst. Die Crawling API erledigt das für Sie; wenn Sie einen eigenen Stack aufbauen, ist das der Teil, auf den es ankommt.
- Statuscodes beachten. Ein Lauf, der beginnt, Challenges oder Fehler zurückzuliefern, signalisiert Ihnen, dass die aktuelle Rate oder IP-Stufe nicht mehr ausreicht. Behandeln Sie das als Signal zum Zurückrudern, nicht als Rauschen, das Sie ignorieren können.
Für das umfassendere Vorgehen lesen Sie wie Sie Websites scrapen, ohne gesperrt zu werden und die vertiefte Behandlung wie Sie CAPTCHAs beim Web Scraping umgehen. Wenn Sie Ihren eigenen Datenverkehr lieber über einen rotierenden Pool leiten möchten, anstatt die verwaltete API zu nutzen, bietet der Smart AI Proxy (auch AI Proxy genannt) dieselbe Wohn-IP-Rotation als Drop-in-Proxy-Endpunkt.
Ist es legal, Crunchbase zu scrapen?
Ob das Scrapen von Crunchbase erlaubt ist, hängt von den Nutzungsbedingungen von Crunchbase, Ihrer Rechtsordnung und dem ab, was Sie mit den Daten tun. Crunchbase's Bedingungen schränken automatisierten Zugriff ein, sodass das Scrapen gegen diese Bedingungen verstoßen kann, egal wie sorgfältig Ihr Tooling ist. Keiner der hier verwendeten Code ändert das; er macht nur den technischen Teil funktionsfähig. Lesen Sie die Nutzungsbedingungen von Crunchbase und seine robots.txt und behandeln Sie beides als Grenze für das, was Sie sammeln.
Einige Grundsätze, an denen es sich lohnt festzuhalten. Sammeln Sie nur öffentliche Daten: Unternehmensname, Beschreibung, Standort, Mitarbeiterzahl, Website, Rang, Gründungsjahr und Gründer, die jeder ohne Konto sehen kann. Respektieren Sie Crunchbase's formulierte Ratenerwartungen und halten Sie Ihr Anfragevolumen niedrig genug, sodass Sie die Server nicht belasten. Vermeiden Sie personenbezogene Daten, einschließlich allem, was mit identifizierbaren Personen über das öffentlich auf einem Unternehmensprofil Aufgeführte hinaus verbunden ist. Wenn Sie die Daten kommerziell wiederverwenden möchten, holen Sie eine Erlaubnis oder einen offiziellen Vertrag ein, anstatt anzunehmen, dass Schweigen Zustimmung bedeutet.
Für lizenzierte oder Massenzugriffe bietet Crunchbase eine offizielle Crunchbase API an, und das ist das richtige Werkzeug, wenn Sie große Volumina, garantierte Struktur oder kommerzielle Rechte benötigen. Dieser Leitfaden beschränkt sich bewusst auf öffentliche Unternehmensprofilseiten, da das die Linie ist, die die Arbeit verteidigbar macht. Er deckt nichts hinter einem Login ab, keine Crunchbase-Pro- oder bezahlte Tier-Daten, keine privaten oder finanziellen Daten hinter einer Anmeldung, keine Nutzerkonto- oder Profildaten und keinen Versuch, Authentifizierung zu umgehen. Wenn Ihr Projekt mehr als öffentliche Profile benötigt, ist die offizielle Crunchbase API oder eine Datenvereinbarung der richtige Weg, kein ausgefeilterer Scraper.
Wichtigste Erkenntnisse
- Crunchbase wird clientseitig gerendert. Ein einfacher Abruf liefert eine leere Hülle, sodass Sie die Seite vor dem Parsen rendern müssen.
-
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 sie auf Inhalte wartet. - BeautifulSoup erledigt die Extraktion. Bilden Sie Titel, Beschreibung, Standort, Mitarbeiter, Website, Rang, Gründungsjahr und Gründer auf aktuelle Selektoren ab und rechnen Sie damit, dass diese Selektoren sich verändern.
- Skalieren durch Schleifen über URLs. Derselbe Parser funktioniert auf jedem Profil, sodass ein echter Auftrag nur eine Liste von Organisations-Links plus vernünftige Dosierung ist.
- Bleiben Sie bei öffentlichen Daten. Respektieren Sie Crunchbase's AGB und robots.txt, bevorzugen Sie die offizielle Crunchbase API für lizenzierte oder Massendaten und berühren Sie niemals Konten, Pro-Daten oder personenbezogene Informationen.
Häufig gestellte Fragen
Warum liefert ein einfacher Abruf keine Daten von Crunchbase?
Weil Crunchbase seinen Profilinhalt clientseitig mit JavaScript rendert. Das initiale HTML ist eine Hülle, die sich erst füllt, nachdem die Seitenskripte in einem Browser ausgeführt wurden, sodass eine einfache HTTP-Anfrage Status 200 mit leeren Unternehmensfeldern zurückgibt. Um echte Daten 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 für Crunchbase?
Den JS-Token. Der normale Token ruft statisches HTML ab, das bei Crunchbase dieselbe leere Hülle ist, die ein einfacher Abruf zurückgibt. Der JS-Token rendert die Seite in einem echten Browser, bevor er das HTML zurückgibt, sodass die Profilfelder vorhanden sind, wenn BeautifulSoup sie parst.
Meine Selektoren liefern None. Was hat sich geändert?
Fast sicher Crunchbase's Markup. Die Angular-ng-star-inserted-Marker, field-formatter-Elemente und Abschnitts-Wrapper ändern sich ohne Vorankündigung, sodass Selektoren, die letzten Monat funktionierten, kaputt gehen können. Überprüfen Sie ein Live-Profil in den Entwicklertools Ihres Browsers und aktualisieren Sie die Selektoren. Regelmäßige Selektor-Wartung ist für jeden produktiven Scraper normal.
Sollte ich die offizielle Crunchbase API verwenden oder die Website scrapen?
Wenn Sie lizenzierte Daten, Massenvolumen, garantierte Struktur oder Rechte zur kommerziellen Nutzung benötigen, verwenden Sie die offizielle Crunchbase API. Sie ist dafür gebaut und hält Sie auf der richtigen Seite ihrer Bedingungen. Das Scrapen öffentlicher Profile mit dem in diesem Leitfaden beschriebenen Ansatz passt zu kleinerer, öffentlicher Datenforschung, bei der kein API-Zugang vorhanden ist, solange Sie die AGB, robots.txt und Ratenlimits respektieren.
Kann ich finanzielle Daten oder Pro-Daten von Crunchbase scrapen?
Nein, und dieser Leitfaden behandelt das nicht. Finanzielle Details und Crunchbase-Pro-Daten befinden sich hinter einem Login oder einer bezahlten Stufe und sind daher keine öffentlichen Daten. Das Scrapen von login-gesperrten oder bezahlten Inhalten oder das Umgehen von Authentifizierung, um diese zu erreichen, liegt außerhalb des Rahmens und verstößt gegen Crunchbase's Bedingungen. Für diese Daten ist die offizielle Crunchbase API oder eine Lizenzvereinbarung der richtige Weg.
Wie vermeide ich eine Sperrung beim Scrapen von Crunchbase?
Halten Sie Ihre Pro-IP-Anfragerate niedrig, variieren Sie Ihre Ziele, anstatt einen Pfad zu schleifen, und leiten Sie durch rotierende Wohn-IPs, damit keine einzelne Adresse ein Ratenlimit auslöst. Die Crawling API verwaltet Rotation und einen vertrauenswürdigen IP-Pool für Sie; wenn Sie einen eigenen Stack aufbauen, ist das der Teil, in den Sie investieren sollten. Beobachten Sie die Statuscodes und rudern Sie zurück, wenn Sie beginnen, Challenges zu sehen.
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.

