Maison > développement back-end > Tutoriel Python > Comment gratter Crunchbase à l'aide de Python dans Easy Guide)

Comment gratter Crunchbase à l'aide de Python dans Easy Guide)

Mary-Kate Olsen
Libérer: 2025-01-16 12:57:59
original
302 Les gens l'ont consulté

Les développeurs Python connaissent le sujet : vous avez besoin de données d'entreprise fiables, et Crunchbase les possède. Ce guide vous montre comment créer un scraper Crunchbase efficace en Python qui vous fournit les données dont vous avez besoin.

Crunchbase suit les détails importants : emplacements, orientation commerciale, fondateurs et historiques d'investissement. L'extraction manuelle d'un ensemble de données aussi volumineux n'est pas pratique - l'automatisation est essentielle pour transformer ces informations dans un format analysable.

À la fin de ce blog, nous explorerons trois manières différentes d'extraire des données de Crunchbase à l'aide de Crawlee pour Python. Nous mettrons pleinement en œuvre deux d’entre eux et discuterons des spécificités et des défis du troisième. Cela nous aidera à mieux comprendre à quel point il est important de bien choisir la bonne source de données.

Remarque : ce guide provient d'un développeur de notre communauté en pleine croissance. Avez-vous construit des projets intéressants avec Crawlee ? Rejoignez-nous sur Discord pour partager vos expériences et vos idées de blog – nous apprécions ces contributions de développeurs comme vous.

Étapes clés que nous aborderons :

  1. Configuration du projet
  2. Choisir la source de données
  3. Implémentation d'un robot d'exploration basé sur un plan de site
  4. Analyse de l'approche basée sur la recherche et ses limites
  5. Implémentation du robot d'exploration officiel de l'API
  6. Conclusion et accès au référentiel

Conditions préalables

  • Python 3.9 ou supérieur
  • Familiarité avec les concepts de web scraping
  • Crawlee pour Python v0.5.0
  • poésie v2.0 ou supérieure

Configuration du projet

Avant de commencer le scraping, nous devons mettre en place notre projet. Dans ce guide, nous n'utiliserons pas de modèles de robots (Playwright et Beautifulsoup), nous allons donc configurer le projet manuellement.

  1. Installer la poésie

    pipx install poetry
    
    Copier après la connexion
    Copier après la connexion
    Copier après la connexion
    Copier après la connexion
  2. Créez et accédez au dossier du projet.

    mkdir crunchbase-crawlee && cd crunchbase-crawlee
    
    Copier après la connexion
    Copier après la connexion
    Copier après la connexion
  3. Initialisez le projet en utilisant Poésie, en laissant tous les champs vides.

    poetry init
    
    Copier après la connexion
    Copier après la connexion
    Copier après la connexion

    Lorsque vous y êtes invité :

    • Pour « Versions Python compatibles », saisissez : >={votre version Python},<4.0 (Par exemple, si vous utilisez Python 3.10, saisissez : >=3.10,<4.0)
    • Laissez tous les autres champs vides en appuyant sur Entrée
    • Confirmez la génération en tapant "oui"
  4. Ajoutez et installez Crawlee avec les dépendances nécessaires à votre projet à l'aide de Poetry.

    poetry add crawlee[parsel,curl-impersonate]
    
    Copier après la connexion
    Copier après la connexion
    Copier après la connexion
  5. Terminez la configuration du projet en créant la structure de fichiers standard pour les projets Crawlee pour Python.

    mkdir crunchbase-crawlee && touch crunchbase-crawlee/{__init__.py,__main__.py,main.py,routes.py}
    
    Copier après la connexion
    Copier après la connexion
    Copier après la connexion

Après avoir mis en place la structure de base du projet, nous pouvons explorer différentes méthodes d'obtention de données à partir de Crunchbase.

Choisir la source de données

Bien que nous puissions extraire les données cibles directement à partir de la page de l'entreprise, nous devons choisir la meilleure façon de naviguer sur le site.

Un examen attentif de la structure de Crunchbase montre que nous disposons de trois options principales pour obtenir des données :

  1. Plan du site - pour une traversée complète du site.
  2. Recherche - pour une collecte de données ciblée.
  3. API officielle - méthode recommandée.

Examinons chacune de ces approches en détail.

Scraping Crunchbase à l'aide du plan du site et Crawlee pour Python

Le plan du site est un moyen standard de navigation sur le site utilisé par les robots d'exploration comme Google, Ahrefs et d'autres moteurs de recherche. Tous les robots doivent suivre les règles décrites dans robots.txt.

Regardons la structure du plan du site de Crunchbase :

Sitemap first lvl

Comme vous pouvez le constater, les liens vers les pages de l'organisation se trouvent dans des fichiers Sitemap de deuxième niveau, qui sont compressés à l'aide de gzip.

La structure de l'un de ces fichiers ressemble à ceci :

Sitemap second lvl

Le champ lastmod est ici particulièrement important. Il permet de savoir quelles entreprises ont mis à jour leurs informations depuis la précédente collecte de données. Ceci est particulièrement utile pour les mises à jour régulières des données.

1. Configuration du robot pour le scraping

Pour travailler avec le site, nous utiliserons CurlImpersonateHttpClient, qui se fait passer pour un navigateur Safari. Bien que ce choix puisse sembler inattendu pour travailler avec un plan de site, il est rendu nécessaire par les fonctionnalités de protection de Crunchbase.

La raison est que Crunchbase utilise Cloudflare pour se protéger contre les accès automatisés. Ceci est clairement visible lors de l'analyse du trafic sur une page d'entreprise :

Cloudflare Link

Une fonctionnalité intéressante est que challenges.cloudflare est exécuté après le chargement du document avec les données. Cela signifie que nous recevons les données en premier, et ensuite seulement JavaScript vérifie si nous sommes un robot. Si l'empreinte digitale de notre client HTTP est suffisamment similaire à celle d'un vrai navigateur, nous recevrons les données avec succès.

Cloudflare analyse également le trafic au niveau du plan du site. Si notre robot ne semble pas légitime, l'accès sera bloqué. C'est pourquoi nous nous faisons passer pour un vrai navigateur.

Pour éviter les blocages dus à une exploration trop agressive, nous configurerons ConcurrencySettings.

Lors de la mise à l'échelle de cette approche, vous aurez probablement besoin de proxys. Des informations détaillées sur la configuration du proxy peuvent être trouvées dans la documentation.

Nous enregistrerons nos résultats de scraping au format JSON. Voici à quoi ressemble la configuration de base du robot :

pipx install poetry
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion

2. Implémentation de la navigation sur le plan du site

La navigation sur le plan du site se déroule en deux étapes. Dans un premier temps, nous devons obtenir une liste de tous les fichiers contenant des informations sur l'organisation :

pipx install poetry
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion

Dans un deuxième temps, nous traitons les fichiers de plan de site de deuxième niveau stockés au format gzip. Cela nécessite une approche particulière car les données doivent d'abord être décompressées :

mkdir crunchbase-crawlee && cd crunchbase-crawlee
Copier après la connexion
Copier après la connexion
Copier après la connexion

3. Extraction et sauvegarde des données

Chaque page d'entreprise contient une grande quantité d'informations. À des fins de démonstration, nous nous concentrerons sur les champs principaux : nom de l'entreprise, brève description, site Web et emplacement.

L'un des avantages de Crunchbase est que toutes les données sont stockées au format JSON au sein de la page :

Company Data

Cela simplifie considérablement l'extraction des données : il suffit d'utiliser un seul sélecteur Xpath pour obtenir le JSON, puis d'appliquer jmespath pour extraire les champs nécessaires :

poetry init
Copier après la connexion
Copier après la connexion
Copier après la connexion

Les données collectées sont enregistrées dans le stockage interne de Crawlee pour Python à l'aide de la méthode context.push_data. Une fois le robot terminé, nous exportons toutes les données collectées vers un fichier JSON :

poetry add crawlee[parsel,curl-impersonate]
Copier après la connexion
Copier après la connexion
Copier après la connexion

4. Exécuter le projet

Une fois tous les composants en place, nous devons créer un point d'entrée pour notre robot :

mkdir crunchbase-crawlee && touch crunchbase-crawlee/{__init__.py,__main__.py,main.py,routes.py}
Copier après la connexion
Copier après la connexion
Copier après la connexion

Exécutez le robot en utilisant Poetry :

# 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. Enfin, caractéristiques de l'utilisation du robot de plan de site
</h3>

<p>L'approche du plan de site présente des avantages et des limites distincts. C'est idéal dans les cas suivants :</p>

<ul>
<li>Lorsque vous devez collecter des données sur toutes les entreprises de la plateforme</li>
<li>Lorsqu'il n'y a pas de critères précis de sélection des entreprises</li>
<li>Si vous disposez de suffisamment de temps et de ressources informatiques</li>
</ul>

<p>Cependant, il existe des limites importantes à prendre en compte :</p>

<ul>
<li>Presque aucune possibilité de filtrer les données lors de la collecte</li>
<li>Nécessite une surveillance constante des blocs Cloudflare</li>
<li>La mise à l'échelle de la solution nécessite des serveurs proxy, ce qui augmente les coûts du projet</li>
</ul>

<h2>
  
  
  Utilisation de la recherche pour scraper Crunchbase
</h2>

<p>Les limites de l'approche du plan de site pourraient indiquer que la recherche est la prochaine solution. Cependant, Crunchbase applique des mesures de sécurité plus strictes à sa fonctionnalité de recherche par rapport à ses pages publiques.</p>

<p>La principale différence réside dans le fonctionnement de la protection Cloudflare. Bien que nous recevions des données avant la vérification de challenges.cloudflare lors de l'accès à une page d'entreprise, l'API de recherche nécessite des cookies valides qui ont réussi cette vérification.</p>

<p>Vérifions cela en pratique. Ouvrez le lien suivant en mode navigation privée :<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)
Copier après la connexion

Lors de l'analyse du trafic, nous verrons le modèle suivant :

Search Protect

La séquence des événements ici est :

  1. Tout d'abord, la page est bloquée avec le code 403
  2. Ensuite, la vérification challenges.cloudflare est effectuée
  3. Ce n'est qu'après avoir réussi le contrôle que nous recevons des données avec le code 200

L'automatisation de ce processus nécessiterait un navigateur sans tête capable de contourner Cloudflare Turnstile. La version actuelle de Crawlee pour Python (v0.5.0) ne fournit pas cette fonctionnalité, bien qu'elle soit prévue pour un développement futur.

Vous pouvez étendre les capacités de Crawlee pour Python en intégrant Camoufox en suivant cet exemple.

Travailler avec l'API officielle Crunchbase

Crunchbase fournit une API gratuite avec des fonctionnalités de base. Les utilisateurs d'abonnements payants bénéficient d'un accès étendu aux données. Une documentation complète sur les points de terminaison disponibles est disponible dans la spécification officielle de l'API.

1. Configuration de l'accès à l'API

Pour commencer à travailler avec l'API, suivez ces étapes :

  1. Créez un compte Crunchbase
  2. Allez dans la section Intégrations
  3. Créer une clé API Crunchbase Basic

Bien que la documentation indique que l'activation de la clé peut prendre jusqu'à une heure, elle commence généralement à fonctionner immédiatement après la création.

2. Configuration du robot pour le travail de l'API

Une fonctionnalité importante de l'API est la limite - pas plus de 200 requêtes par minute, mais dans la version gratuite, ce nombre est nettement inférieur. En tenant compte de cela, configurons ConcurrencySettings. Puisque nous travaillons avec l'API officielle, nous n'avons pas besoin de masquer notre client HTTP. Nous utiliserons le standard 'HttpxHttpClient' avec des en-têtes prédéfinis.

Tout d'abord, enregistrons la clé API dans une variable d'environnement :

pipx install poetry
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion

Voici à quoi ressemble la configuration du robot pour travailler avec l'API :

mkdir crunchbase-crawlee && cd crunchbase-crawlee
Copier après la connexion
Copier après la connexion
Copier après la connexion

3. Traitement des résultats de recherche

Pour travailler avec l'API, nous aurons besoin de deux points de terminaison principaux :

  1. get_autocompletes - pour la recherche
  2. get_entities_organizations__entity_id - pour obtenir des données

Tout d'abord, implémentons le traitement des résultats de recherche :

poetry init
Copier après la connexion
Copier après la connexion
Copier après la connexion

4. Extraction des données de l'entreprise

Après avoir obtenu la liste des entreprises, nous extrayons des informations détaillées sur chacune d'entre elles :

poetry add crawlee[parsel,curl-impersonate]
Copier après la connexion
Copier après la connexion
Copier après la connexion

5. Recherche avancée basée sur la localisation

Si vous avez besoin de fonctionnalités de recherche plus flexibles, l'API fournit un point de terminaison de recherche spécial. Voici un exemple de recherche de toutes les entreprises à Prague :

mkdir crunchbase-crawlee && touch crunchbase-crawlee/{__init__.py,__main__.py,main.py,routes.py}
Copier après la connexion
Copier après la connexion
Copier après la connexion

Pour traiter les résultats de recherche et la pagination, nous utilisons le gestionnaire suivant :

# 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')
Copier après la connexion

6. Enfin, les limitations de l'API gratuite

La version gratuite de l'API présente des limitations importantes :

  • Ensemble limité de points de terminaison disponibles
  • La fonction de saisie semi-automatique ne fonctionne que pour les recherches d'entreprises
  • Tous les champs de données ne sont pas accessibles
  • Capacités limitées de filtrage de recherche

Envisagez un abonnement payant pour le travail au niveau de la production. L'API fournit le moyen le plus fiable d'accéder aux données Crunchbase, même avec ses contraintes de débit.

Quelle est votre meilleure voie à suivre ?

Nous avons exploré trois approches différentes pour obtenir des données de Crunchbase :

  1. Plan du site - pour la collecte de données à grande échelle
  2. Recherche - difficile à automatiser en raison de la protection Cloudflare
  3. API officielle - la solution la plus fiable pour les projets commerciaux

Chaque méthode a ses avantages, mais pour la plupart des projets, je recommande d'utiliser l'API officielle malgré ses limitations dans la version gratuite.

Le code source complet est disponible dans mon dépôt. Vous avez des questions ou souhaitez discuter des détails de mise en œuvre ? Rejoignez notre Discord - notre communauté de développeurs est là pour vous aider.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:dev.to
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal