Heim >Backend-Entwicklung >Python-Tutorial >Anleitung zum Scrapen von Crunchbase mit Python im Easy Guide)
Python-Entwickler kennen das Problem: Sie benötigen zuverlässige Unternehmensdaten, und Crunchbase hat sie. Diese Anleitung zeigt Ihnen, wie Sie einen effektiven Crunchbase-Scraper in Python erstellen, der Ihnen die Daten liefert, die Sie benötigen.
Crunchbase verfolgt wichtige Details: Standorte, Geschäftsschwerpunkt, Gründer und Investitionshistorie. Eine manuelle Extraktion aus einem so großen Datensatz ist nicht praktikabel – Automatisierung ist für die Umwandlung dieser Informationen in ein analysierbares Format unerlässlich.
Am Ende dieses Blogs werden wir drei verschiedene Möglichkeiten erkunden, Daten aus Crunchbase mit Crawlee für Python zu extrahieren. Zwei davon werden wir vollständig umsetzen und die Besonderheiten und Herausforderungen der dritten besprechen. Dies wird uns helfen, besser zu verstehen, wie wichtig es ist, die richtige Datenquelle richtig auszuwählen.
Hinweis: Dieser Leitfaden stammt von einem Entwickler aus unserer wachsenden Community. Haben Sie mit Crawlee interessante Projekte realisiert? Treten Sie uns auf Discord bei, um Ihre Erfahrungen und Blog-Ideen zu teilen – wir schätzen die Beiträge von Entwicklern wie Ihnen.
Wichtige Schritte, die wir behandeln werden:
Bevor wir mit dem Schaben beginnen, müssen wir unser Projekt einrichten. In dieser Anleitung verwenden wir keine Crawler-Vorlagen (Playwright und Beautifulsoup), daher richten wir das Projekt manuell ein.
Poetry installieren
pipx install poetry
Erstellen Sie den Projektordner und navigieren Sie zu ihm.
mkdir crunchbase-crawlee && cd crunchbase-crawlee
Initialisieren Sie das Projekt mit Poetry und lassen Sie alle Felder leer.
poetry init
Bei Aufforderung:
Fügen Sie Crawlee mit den erforderlichen Abhängigkeiten zu Ihrem Projekt hinzu und installieren Sie es mithilfe von Poetry.
poetry add crawlee[parsel,curl-impersonate]
Schließen Sie die Projekteinrichtung ab, indem Sie die Standarddateistruktur für Crawlee für Python-Projekte erstellen.
mkdir crunchbase-crawlee && touch crunchbase-crawlee/{__init__.py,__main__.py,main.py,routes.py}
Nachdem wir die grundlegende Projektstruktur eingerichtet haben, können wir verschiedene Methoden zum Abrufen von Daten von Crunchbase erkunden.
Während wir Zieldaten direkt von der Unternehmensseite extrahieren können, müssen wir die beste Art der Navigation auf der Website auswählen.
Eine sorgfältige Untersuchung der Struktur von Crunchbase zeigt, dass wir drei Hauptoptionen haben, um Daten zu erhalten:
Lassen Sie uns jeden dieser Ansätze im Detail untersuchen.
Sitemap ist eine Standardmethode der Site-Navigation, die von Crawlern wie Google, Ahrefs und anderen Suchmaschinen verwendet wird. Alle Crawler müssen die in robots.txt beschriebenen Regeln befolgen.
Sehen wir uns die Struktur der Sitemap von Crunchbase an:
Wie Sie sehen können, befinden sich Links zu Organisationsseiten in Sitemap-Dateien der zweiten Ebene, die mit gzip komprimiert werden.
Die Struktur einer dieser Dateien sieht folgendermaßen aus:
Das Lastmod-Feld ist hier besonders wichtig. Es ermöglicht die Nachverfolgung, welche Unternehmen ihre Informationen seit der letzten Datenerfassung aktualisiert haben. Dies ist besonders nützlich für regelmäßige Datenaktualisierungen.
Um mit der Site zu arbeiten, verwenden wir CurlImpersonateHttpClient, der einen Safari-Browser imitiert. Während diese Wahl für die Arbeit mit einer Sitemap unerwartet erscheinen mag, ist sie aufgrund der Schutzfunktionen von Crunchbase erforderlich.
Der Grund dafür ist, dass Crunchbase Cloudflare zum Schutz vor automatisierten Zugriffen nutzt. Dies wird deutlich sichtbar, wenn man den Traffic auf einer Unternehmensseite analysiert:
Eine interessante Funktion ist, dass Challenges.cloudflare nach dem Laden des Dokuments mit Daten ausgeführt wird. Das bedeutet, dass wir zuerst die Daten erhalten und erst dann prüft JavaScript, ob wir ein Bot sind. Wenn der Fingerabdruck unseres HTTP-Clients einem echten Browser hinreichend ähnlich ist, können wir die Daten erfolgreich empfangen.
Cloudflare analysiert den Datenverkehr auch auf Sitemap-Ebene. Wenn unser Crawler nicht legitim aussieht, wird der Zugriff blockiert. Deshalb imitieren wir einen echten Browser.
Um Blockaden aufgrund übermäßig aggressiven Crawlens zu verhindern, konfigurieren wir ConcurrencySettings.
Wenn Sie diesen Ansatz skalieren, benötigen Sie wahrscheinlich Proxys. Detaillierte Informationen zur Proxy-Einrichtung finden Sie in der Dokumentation.
Wir speichern unsere Scraping-Ergebnisse im JSON-Format. So sieht die grundlegende Crawler-Konfiguration aus:
pipx install poetry
Die Sitemap-Navigation erfolgt in zwei Schritten. Im ersten Schritt benötigen wir eine Liste aller Dateien, die Organisationsinformationen enthalten:
pipx install poetry
Im zweiten Schritt verarbeiten wir Sitemap-Dateien der zweiten Ebene, die im gzip-Format gespeichert sind. Dies erfordert einen besonderen Ansatz, da die Daten zuerst dekomprimiert werden müssen:
mkdir crunchbase-crawlee && cd crunchbase-crawlee
Jede Unternehmensseite enthält eine große Menge an Informationen. Zu Demonstrationszwecken konzentrieren wir uns auf die Hauptfelder: Firmenname, Kurzbeschreibung, Website und Standort.
Einer der Vorteile von Crunchbase besteht darin, dass alle Daten im JSON-Format innerhalb der Seite gespeichert werden:
Dies vereinfacht die Datenextraktion erheblich – wir müssen nur einen Xpath-Selektor verwenden, um den JSON zu erhalten, und dann jmespath anwenden, um die benötigten Felder zu extrahieren:
poetry init
Die gesammelten Daten werden mithilfe der context.push_data-Methode im internen Speicher von Crawlee for Python gespeichert. Wenn der Crawler fertig ist, exportieren wir alle gesammelten Daten in eine JSON-Datei:
poetry add crawlee[parsel,curl-impersonate]
Sobald alle Komponenten vorhanden sind, müssen wir einen Einstiegspunkt für unseren Crawler erstellen:
mkdir crunchbase-crawlee && touch crunchbase-crawlee/{__init__.py,__main__.py,main.py,routes.py}
Führen Sie den Crawler mit Poetry aus:
# main.py from crawlee import ConcurrencySettings, HttpHeaders from crawlee.crawlers import ParselCrawler from crawlee.http_clients import CurlImpersonateHttpClient from .routes import router async def main() -> None: """The crawler entry point.""" concurrency_settings = ConcurrencySettings(max_concurrency=1, max_tasks_per_minute=50) http_client = CurlImpersonateHttpClient( impersonate='safari17_0', headers=HttpHeaders( { 'accept-language': 'en', 'accept-encoding': 'gzip, deflate, br, zstd', } ), ) crawler = ParselCrawler( request_handler=router, max_request_retries=1, concurrency_settings=concurrency_settings, http_client=http_client, max_requests_per_crawl=30, ) await crawler.run(['https://www.crunchbase.com/www-sitemaps/sitemap-index.xml']) await crawler.export_data_json('crunchbase_data.json') <h3> 5. Abschließend die Merkmale der Verwendung des Sitemap-Crawlers </h3> <p>Der Sitemap-Ansatz hat seine deutlichen Vorteile und Einschränkungen. Es ist ideal in den folgenden Fällen:</p> <ul> <li>Wenn Sie Daten über alle Unternehmen auf der Plattform sammeln müssen</li> <li>Wenn es keine spezifischen Kriterien für die Unternehmensauswahl gibt</li> <li>Wenn Sie über ausreichend Zeit und Rechenressourcen verfügen</li> </ul> <p>Es sind jedoch erhebliche Einschränkungen zu berücksichtigen:</p> <ul> <li>Fast keine Möglichkeit, Daten während der Erfassung zu filtern</li> <li>Erfordert eine ständige Überwachung der Cloudflare-Blöcke</li> <li>Für die Skalierung der Lösung sind Proxyserver erforderlich, was die Projektkosten erhöht</li> </ul> <h2> Verwenden Sie die Suche nach Scraping Crunchbase </h2> <p>Die Einschränkungen des Sitemap-Ansatzes könnten darauf hindeuten, dass die Suche die nächste Lösung ist. Allerdings wendet Crunchbase bei seiner Suchfunktion im Vergleich zu seinen öffentlichen Seiten strengere Sicherheitsmaßnahmen an.</p> <p>Der Hauptunterschied liegt in der Funktionsweise des Cloudflare-Schutzes. Während wir beim Zugriff auf eine Unternehmensseite Daten vor der Challenges.cloudflare-Prüfung erhalten, erfordert die Such-API gültige Cookies, die diese Prüfung bestanden haben.</p> <p>Lassen Sie uns dies in der Praxis überprüfen. Öffnen Sie den folgenden Link im Inkognito-Modus:<br> </p> <pre class="brush:php;toolbar:false"># routes.py from crawlee.crawlers import ParselCrawlingContext from crawlee.router import Router from crawlee import Request router = Router[ParselCrawlingContext]() @router.default_handler async def default_handler(context: ParselCrawlingContext) -> None: """Default request handler.""" context.log.info(f'default_handler processing {context.request} ...') requests = [ Request.from_url(url, label='sitemap') for url in context.selector.xpath('//loc[contains(., "sitemap-organizations")]/text()').getall() ] # Since this is a tutorial, I don't want to upload more than one sitemap link await context.add_requests(requests, limit=1)
Bei der Analyse des Datenverkehrs sehen wir das folgende Muster:
Die Reihenfolge der Ereignisse hier ist:
Um diesen Prozess zu automatisieren, wäre ein Headless-Browser erforderlich, der Cloudflare Turnstile umgehen kann. Die aktuelle Version von Crawlee für Python (v0.5.0) bietet diese Funktionalität nicht, obwohl eine zukünftige Entwicklung geplant ist.
Sie können die Funktionen von Crawlee für Python erweitern, indem Sie Camoufox nach diesem Beispiel integrieren.
Crunchbase bietet eine kostenlose API mit grundlegenden Funktionen. Benutzer mit kostenpflichtigen Abonnements erhalten erweiterten Datenzugriff. Eine vollständige Dokumentation für verfügbare Endpunkte finden Sie in der offiziellen API-Spezifikation.
Um mit der API zu arbeiten, befolgen Sie diese Schritte:
Obwohl in der Dokumentation angegeben ist, dass die Schlüsselaktivierung bis zu einer Stunde dauern kann, beginnt sie normalerweise sofort nach der Erstellung zu funktionieren.
Eine wichtige API-Funktion ist das Limit – nicht mehr als 200 Anfragen pro Minute, aber in der kostenlosen Version ist diese Zahl deutlich niedriger. Unter Berücksichtigung dessen konfigurieren wir ConcurrencySettings. Da wir mit der offiziellen API arbeiten, müssen wir unseren HTTP-Client nicht maskieren. Wir verwenden den Standard „HttpxHttpClient“ mit voreingestellten Headern.
Speichern wir zunächst den API-Schlüssel in einer Umgebungsvariablen:
pipx install poetry
So sieht die Crawler-Konfiguration für die Arbeit mit der API aus:
mkdir crunchbase-crawlee && cd crunchbase-crawlee
Für die Arbeit mit der API benötigen wir zwei Hauptendpunkte:
Zuerst implementieren wir die Suchergebnisverarbeitung:
poetry init
Nachdem wir die Liste der Unternehmen erhalten haben, extrahieren wir detaillierte Informationen zu jedem Unternehmen:
poetry add crawlee[parsel,curl-impersonate]
Wenn Sie flexiblere Suchfunktionen benötigen, bietet die API einen speziellen Suchendpunkt. Hier ist ein Beispiel für die Suche nach allen Unternehmen in Prag:
mkdir crunchbase-crawlee && touch crunchbase-crawlee/{__init__.py,__main__.py,main.py,routes.py}
Zur Verarbeitung von Suchergebnissen und Paginierung verwenden wir den folgenden Handler:
# main.py from crawlee import ConcurrencySettings, HttpHeaders from crawlee.crawlers import ParselCrawler from crawlee.http_clients import CurlImpersonateHttpClient from .routes import router async def main() -> None: """The crawler entry point.""" concurrency_settings = ConcurrencySettings(max_concurrency=1, max_tasks_per_minute=50) http_client = CurlImpersonateHttpClient( impersonate='safari17_0', headers=HttpHeaders( { 'accept-language': 'en', 'accept-encoding': 'gzip, deflate, br, zstd', } ), ) crawler = ParselCrawler( request_handler=router, max_request_retries=1, concurrency_settings=concurrency_settings, http_client=http_client, max_requests_per_crawl=30, ) await crawler.run(['https://www.crunchbase.com/www-sitemaps/sitemap-index.xml']) await crawler.export_data_json('crunchbase_data.json')
Die kostenlose Version der API weist erhebliche Einschränkungen auf:
Erwägen Sie ein kostenpflichtiges Abonnement für Arbeiten auf Produktionsebene. Die API bietet trotz ihrer Ratenbeschränkungen die zuverlässigste Möglichkeit, auf Crunchbase-Daten zuzugreifen.
Wir haben drei verschiedene Ansätze zum Abrufen von Daten von Crunchbase untersucht:
Jede Methode hat ihre Vorteile, aber für die meisten Projekte empfehle ich die Verwendung der offiziellen API trotz ihrer Einschränkungen in der kostenlosen Version.
Der vollständige Quellcode ist in meinem Repository verfügbar. Haben Sie Fragen oder möchten Sie Einzelheiten zur Implementierung besprechen? Treten Sie unserem Discord bei – unsere Entwickler-Community ist für Sie da.
Das obige ist der detaillierte Inhalt vonAnleitung zum Scrapen von Crunchbase mit Python im Easy Guide). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!