Google est la porte d'entrée de la majeure partie de l'information publique du web, et la page qu'il retourne pour une requête est bien plus qu'une liste de liens bleus. Une seule page de résultats de recherche peut comporter des résultats organiques, des annonces payantes, un encadré "People Also Ask", un panneau de connaissances, un pack local avec une carte et une rangée de recherches associées, chacun étant un bloc distinct de données structurées. Pour quiconque effectue de la recherche de mots-clés, du suivi de positions, de l'analyse concurrentielle ou de la veille concurrentielle, cette page est l'un des jeux de données publics les plus riches sur internet.

Ce guide est le pilier général sur la façon d'extraire les pages de recherche Google : ce qu'est réellement un SERP, pourquoi une requête HTTP ordinaire est bloquée, les méthodes réalistes pour collecter les données, et un exemple opérationnel qui analyse les blocs de fonctionnalités et pagine. Si vous préférez un tutoriel Python serré à copier-coller, notre tutoriel ciblé sur comment extraire les résultats de recherche Google avec Python en est le complément. Tout ici se limite aux données SERP publiques visibles par quiconque sans compte, et la section sur la légalité en fin d'article n'est pas un simple remplissage, alors lisez-la avant de lancer quoi que ce soit à grande échelle.

Ce que vous allez construire

À la fin, vous aurez un petit script Python qui envoie une URL de recherche Google publique à une API SERP-capable, reçoit du JSON analysé et lit chaque bloc de fonctionnalité dans des enregistrements propres. Nous utilisons la requête "data science" comme exemple de référence et extrayons ces champs de la réponse :

  • Résultats de recherche. Les résultats organiques, chacun avec un titre, une URL de destination, un extrait affiché et une position sur la page.
  • Annonces. Les résultats sponsorisés affichés au-dessus ou en dessous des résultats organiques lorsque la requête est commerciale.
  • People Also Ask. L'encadré de questions connexes extensible, chaque entrée avec sa question, une réponse courte et un lien source.
  • Recherches associées. La rangée de suggestions de requêtes de suivi que Google affiche en bas de la page.
  • Pack local. Le bloc de lieux à proximité avec carte, lorsque la requête a une intention locale.
  • Nombre de résultats. Le nombre total de résultats signalé, qui pilote la pagination.

L'anatomie d'une page de résultats de recherche Google

Pour bien extraire un SERP, il faut d'abord avoir un modèle mental de sa composition. Google ne retourne pas une liste uniforme ; il compose la page à partir de plusieurs blocs distincts, et les blocs qui apparaissent dépendent de l'intention de la requête. Un même parseur doit reconnaître chacun. Voici les parties importantes.

  • Résultats organiques. La liste principale de pages web classées. Chacune porte un titre, l'URL de destination, un extrait et parfois une date ou des liens annexes. C'est le bloc sur lequel se concentre la plupart des travaux SEO, car la position ici est ce que signifie "classer".
  • Annonces. Des résultats payants marqués "Sponsored", affichés en haut et en bas de la page pour les requêtes commerciales. Ils ressemblent aux résultats organiques mais sont achetés, donc le travail d'intelligence concurrentielle les traite comme un flux séparé.
  • People Also Ask (PAA). Une liste extensible de questions connexes. Chacune s'ouvre pour révéler une réponse courte tirée d'une page source, plus un lien vers cette source. Le PAA est une carte utile des questions que les internautes associent à un sujet.
  • Panneau de connaissances. Le cadre d'information à droite (personnes, entreprises, lieux, entités) construit à partir du Knowledge Graph de Google. Il présente des faits clés, des images et des entités connexes sans que l'utilisateur ait à cliquer.
  • Pack local. Une carte plus une courte liste d'entreprises à proximité, affichée lorsque la requête a une intention locale ("coffee shops near me"). Il porte des noms, des notes et des adresses, et diffère des résultats complets de Google Maps.
  • Recherches associées. Une rangée de requêtes suggérées au bas de la page, utile pour l'expansion de mots-clés.
  • Pagination. Les contrôles qui permettent d'aller plus loin dans les résultats, pilotés par un offset start dans l'URL plutôt que par un numéro de page.

La leçon pratique est que "extraire Google" revient vraiment à extraire une poignée de blocs indépendants qui partagent accidentellement une page. Un bon extracteur retourne chacun sous forme de liste distincte pour pouvoir les utiliser séparément en aval. Si vous voulez une visite approfondie de l'encadré de questions spécifiquement, consultez comment extraire le People Also Ask de Google.

Pourquoi une requête ordinaire échoue sur Google

Si vous envoyez une requête HTTP brute à https://www.google.com/search?q=... depuis un script, vous n'obtenez presque jamais la page que vous voyez dans votre propre navigateur. Google est l'une des cibles les plus agressivement défendues du web, pour deux raisons qui se cumulent.

Premièrement, la page est dynamique. Une grande partie d'un SERP moderne, notamment les blocs de fonctionnalités, est assemblée avec JavaScript après l'arrivée du HTML initial. Un simple requests.get voit un squelette, pas le résultat rendu, donc les données que vous voulez ne sont tout simplement pas dans les octets que vous recevez. Deuxièmement, Google surveille attentivement l'automatisation. Une requête qui manque de vrais en-têtes de navigateur, provient d'une IP de datacenter ou arrive plus vite qu'un humain ne pourrait taper reçoit un interstitiel de consentement, un CAPTCHA ou un blocage direct. L'extraction soutenue depuis une seule adresse fait rapidement limiter cette adresse.

Un scraper Google fonctionnel a donc besoin de deux choses en une seule requête : une IP que la plateforme considère comme un visiteur ordinaire et, là où la page s'appuie sur des scripts, un navigateur qui la rend. Vous pouvez assembler cela vous-même avec un navigateur headless et un pool de proxies résidentiels rotatifs, mais maintenir cette flotte en bon état représente l'essentiel du travail et du coût. L'alternative est une API SERP-capable gérée qui combine le rendu, la rotation des IPs et la gestion des CAPTCHA en un seul appel et vous remet des données finales. Nous abordons le compromis entre les deux ensuite.

Méthodes pour extraire Google : API gérée vs fait maison

Il existe deux façons honnêtes de le faire à grande échelle, et il vaut la peine d'être lucide sur les deux.

La pile faite maison. Vous exécutez un navigateur headless (Playwright ou Selenium) pour rendre la page, l'acheminez via un pool de proxies résidentiels rotatifs pour qu'aucune IP ne s'épuise, ajoutez la gestion des en-têtes et des empreintes pour que le trafic ressemble à un humain, et construisez une logique de nouvelle tentative et de résolution de CAPTCHA pour les requêtes qui sont encore mises au défi. Cela fonctionne, et pour un projet académique ponctuel cela peut être le bon choix. L'inconvénient est la maintenance : les proxies expirent, les empreintes deviennent obsolètes, Google envoie des changements de mise en page, et votre résolveur de CAPTCHA a besoin d'être alimenté. Le scraper est la partie facile ; le maintenir non bloqué est le vrai travail. Nos guides sur l'extraction sans être bloqué et contourner les CAPTCHA approfondissent cette pile.

L'API gérée. Vous envoyez une URL à un point d'accès qui possède déjà le pool d'IPs résidentielles, la couche de rendu et la gestion des CAPTCHA, et il retourne soit le HTML final, soit, mieux, le SERP analysé en JSON. Vous sautez complètement l'infrastructure et payez par requête réussie. Le compromis est que vous dépendez d'un fournisseur et de son parseur. Pour la plupart des travaux de suivi de positions en production et de recherche, c'est le choix pragmatique, car le temps que vous passeriez à surveiller une flotte de proxies vaut plus que les frais par requête. L'exemple ci-dessous utilise la Crawlbase Crawling API, qui dispose d'un parseur Google SERP intégré.

La suite de ce guide emprunte la voie de l'API gérée car elle permet d'afficher une sortie réellement analysée sans 200 lignes de plomberie de proxies. Les concepts d'analyse (quel bloc est quoi, comment les champs se correspondent) se transfèrent vers la pile faite maison si vous choisissez cette voie.

Prérequis

Vous avez besoin de quelques éléments en place avant d'écrire du code. Aucun ne prend longtemps.

Python de base. Vous devez être à l'aise pour écrire et exécuter un script Python et installer des paquets avec pip. Si vous souhaitez revoir la partie analyse pour une approche faite maison, notre guide d'utilisation de BeautifulSoup en Python couvre les bases.

Python 3.8 ou supérieur. Confirmez votre version avec python --version. Si vous ne l'avez pas, installez-le depuis python.org ou via une distribution comme Anaconda.

Un compte et un token Crawlbase. Inscrivez-vous, ouvrez votre tableau de bord et copiez votre token de requête. Vous obtenez jusqu'à 20 000 requêtes gratuites sans carte de crédit, et vous ne payez que pour les requêtes réussies. Traitez le token comme un mot de passe : il authentifie vos requêtes, ne le mettez donc pas sous contrôle de version.

Configurer le projet

Créez un environnement virtuel pour isoler les dépendances du projet, puis installez le wrapper Python Crawlbase léger, qui envoie les requêtes à l'API et lit les réponses.

bash
python --version

python -m venv serp_env
source serp_env/bin/activate

pip install crawlbase

Sous Windows, activez l'environnement avec serp_env\Scripts\activate à la place de la ligne source. Le paquet crawlbase est un petit wrapper sans dépendances autour de l'API : vous l'initialisez avec votre token et appelez get avec une URL. SQLite, que nous utilisons pour stocker les résultats plus tard, est livré avec Python, donc il n'y a rien de supplémentaire à installer pour cela.

Étape 1 : récupérer un SERP via la Crawling API

Les pages de recherche de Google fonctionnent bien via le token Normal de la Crawling API, puisque le parseur lit le balisage rendu côté serveur. Initialisez le client avec votre token, pointez-le vers une URL de recherche et demandez le format de réponse JSON pour obtenir une enveloppe propre au lieu du HTML brut.

python
from crawlbase import CrawlingAPI
import json

# Initialize the Crawling API with your Crawlbase token
api = CrawlingAPI({"token": "YOUR_CRAWLBASE_TOKEN"})

# URL of the Google search page you want to scrape
google_search_url = "https://www.google.com/search?q=data+science"

# Ask the API for a JSON response envelope
options = {"format": "json"}

response = api.get(google_search_url, options)

if response["headers"]["cb_status"] == "200":
    body = json.loads(response["body"].decode("latin1"))
    print(json.dumps(body, indent=4, sort_keys=True))
else:
    print("Failed to retrieve the page. Status:", response["status_code"])

L'API retourne une enveloppe JSON avec deux champs de statut et un corps. cb_status (legacy pc_status) est le statut Crawlbase, et original_status est ce que Google lui-même a retourné ; vérifier sur cb_status == "200" signifie qu'un blocage ou un interstitiel remonte comme un échec au lieu d'alimenter du contenu indésirable en aval. Le corps revient sous forme d'octets, donc vous le décodez avec latin1 avant json.loads. Exécuter cela affiche l'enveloppe brute de la page, ce qui confirme que la récupération fonctionne avant d'ajouter l'analyse.

Crawlbase Google Scraper

La vérification cb_status ne lit 200 que parce que la requête a atteint Google comme un visiteur ordinaire dès le départ. La Crawling API récupère le SERP depuis une IP résidentielle rotative, le rend quand un bloc de fonctionnalités nécessite un navigateur, et gère les CAPTCHA qui bloqueraient sinon une requête brute, vous évitant ainsi de gérer vous-même une flotte headless et un pool de proxies résidentiels. Commencez par une URL de recherche publique sur le niveau gratuit.

Étape 2 : analyser les blocs de fonctionnalités SERP

Lire le HTML brut et écrire des sélecteurs pour chaque bloc de fonctionnalités à la main est possible, mais Google envoie souvent des changements de mise en page et les noms de classes sont obfusqués, donc les sélecteurs écrits à la main se cassent constamment. La Crawling API est livrée avec un scraper google-serp intégré qui effectue cette analyse pour vous et retourne chaque bloc sous forme de liste propre. Vous l'activez avec une seule option.

python
from crawlbase import CrawlingAPI
import json

api = CrawlingAPI({"token": "YOUR_CRAWLBASE_TOKEN"})

google_search_url = "https://www.google.com/search?q=data+science"

# The google-serp scraper parses the page into structured JSON
options = {"scraper": "google-serp"}

response = api.get(google_search_url, options)

if response["headers"]["cb_status"] == "200":
    parsed = json.loads(response["body"].decode("latin1"))
    serp = parsed["body"]

    # Each feature block comes back as its own key
    organic = serp.get("searchResults", [])
    ads = serp.get("ads", [])
    paa = serp.get("peopleAlsoAsk", [])
    related = serp.get("relatedSearches", [])
    local = serp.get("snackPack", {})
    total = serp.get("numberOfResults", 0)

    print(f"Organic results: {len(organic)}")
    print(f"Ads: {len(ads)}")
    print(f"People Also Ask: {len(paa)}")
    print(f"Related searches: {len(related)}")
    print(f"Total results reported: {total}")
else:
    print("Failed to retrieve the page. Status:", response["status_code"])

Le scraper google-serp retourne un objet body dont les clés correspondent directement aux blocs de fonctionnalités de la section anatomie. searchResults est la liste organique, ads les résultats sponsorisés, peopleAlsoAsk l'encadré de questions, relatedSearches la rangée de suggestions, et snackPack le pack local avec son lien de carte et ses résultats de lieux. numberOfResults est le total signalé, que vous utiliserez pour piloter la pagination. Chaque entrée dans searchResults porte un title, une url, une description et une position, les enregistrements sont donc prêts à l'emploi sans travail de sélecteurs.

Les blocs qui apparaissent dépendent de la requête

Une requête commerciale fait apparaître des annonces ; une requête informative remplit le bloc People Also Ask ; une requête locale peuple le snack pack. Lisez toujours chaque clé avec .get(key, default) pour qu'un bloc manquant retourne une liste vide plutôt que de lever un KeyError. La même requête peut aussi retourner des blocs différents selon les jours lorsque Google ajuste sa mise en page.

Étape 3 : assembler le script complet

Maintenant, combinez la récupération et l'analyse en un seul script opérationnel qui tire les résultats organiques et l'encadré de questions en enregistrements plats et les écrit en JSON. C'est la forme que vous étendriez pour un vrai travail.

python
from crawlbase import CrawlingAPI
import json

api = CrawlingAPI({"token": "YOUR_CRAWLBASE_TOKEN"})
options = {"scraper": "google-serp"}

def fetch_serp(url):
    response = api.get(url, options)
    if response["headers"]["cb_status"] != "200":
        raise Exception(f"Unable to crawl '{url}'")
    parsed = json.loads(response["body"].decode("latin1"))
    return parsed["body"]

def extract(serp):
    results = []
    for item in serp.get("searchResults", []):
        results.append({
            "position": item.get("position"),
            "title": item.get("title"),
            "url": item.get("url"),
            "description": item.get("description"),
        })
    questions = [q.get("title") for q in serp.get("peopleAlsoAsk", [])]
    related = [r.get("title") for r in serp.get("relatedSearches", [])]
    return {
        "searchResults": results,
        "peopleAlsoAsk": questions,
        "relatedSearches": related,
        "numberOfResults": serp.get("numberOfResults", 0),
    }

def main():
    url = "https://www.google.com/search?q=data+science"
    serp = fetch_serp(url)
    data = extract(serp)
    with open("google_results.json", "w", encoding="utf-8") as f:
        json.dump(data, f, ensure_ascii=False, indent=2)
    print(f"Saved {len(data['searchResults'])} organic results")

if __name__ == "__main__":
    main()

Exécutez avec python main.py. La fonction fetch_serp obtient le SERP analysé et lève une exception pour tout statut non-200 de sorte que les échecs sont visibles, et extract aplatit les blocs qui vous intéressent en un seul objet. Changez la requête dans l'URL et les mêmes deux fonctions gèrent ce qui revient. Pour suivre chaque question People Also Ask jusqu'à sa réponse complète et sa source, les champs description et destination par entrée sont déjà dans la réponse, vous pouvez donc élargir extract sans une autre requête.

À quoi ressemble la sortie

Le scraper google-serp retourne un objet structuré indexé par bloc de fonctionnalités. Voici un exemple tronqué de ce qui revient pour la requête "data science", pour que vous puissiez voir les noms de champs avant d'écrire du code contre eux.

json
{
  "numberOfResults": 2520000000,
  "ads": [],
  "peopleAlsoAsk": [
    {
      "position": 1,
      "title": "What exactly does a data scientist do?",
      "description": "A data scientist uses data to understand and explain the phenomena around them...",
      "destination": { "text": "Coursera", "url": "https://www.coursera.org/articles/what-is-a-data-scientist" }
    }
  ],
  "relatedSearches": [
    { "title": "data science jobs", "url": "https://google.com/search?q=Data+science+jobs" }
  ],
  "searchResults": [
    {
      "position": 1,
      "title": "What is Data Science?",
      "url": "https://www.ibm.com/topics/data-science",
      "description": "Data science combines math and statistics, specialized programming..."
    }
  ],
  "snackPack": { "mapLink": "", "results": [] }
}

Chaque bloc est sa propre clé, vous pouvez donc prendre uniquement les searchResults organiques pour le suivi de positions, uniquement peopleAlsoAsk pour la recherche de contenu, ou uniquement ads pour l'analyse concurrentielle. Comme les blocs d'annonces et locaux sont vides pour une requête informative comme celle-ci, votre code devrait toujours lire par défaut chaque clé plutôt que de supposer qu'elle est présente.

Pagination à travers les résultats

Une page est une démonstration ; un vrai travail SERP va plus loin. Google pagine avec le paramètre de requête start, un offset dans la liste de résultats plutôt qu'un numéro de page. Avec environ neuf à dix résultats organiques par page, start=10 donne la deuxième page, start=20 la troisième, et ainsi de suite. Le champ numberOfResults du parseur est votre limite supérieure, bien qu'en pratique Google ne serve rarement plus de quelques centaines de résultats pour une seule requête.

python
import time

base = "https://www.google.com/search?q=data+science"
all_results = []

for page in range(3):
    start = page * 10
    url = f"{base}&start={start}"
    serp = fetch_serp(url)
    all_results.extend(extract(serp)["searchResults"])
    time.sleep(2)  # pace the crawl

print(f"Collected {len(all_results)} results across 3 pages")

Construisez chaque URL de page avec l'offset, récupérez-la via l'API et analysez-la avec la même fonction. La bonne habitude qui maintient un cycle d'exécution long en bonne santé est le rythme : un court sleep entre les requêtes répartit votre trafic au lieu de l'envoyer en rafale. Pour persister ce que vous collectez, écrivez le titre, l'URL, la description et la position de chaque enregistrement dans une base de données ; SQLite est l'option la plus simple puisqu'il est livré avec Python et ne nécessite pas de serveur. De là, vous pouvez aussi sauvegarder les mêmes lignes en CSV pour un tableur, ou les charger dans l'outil d'analyse que vous utilisez.

Mise à l'échelle et rester non bloqué

Passer d'une poignée de requêtes à des milliers change le problème de "analyser la page" à "rester non bloqué dans le temps". Quelques habitudes rendent un travail de longue durée durable.

  • Rythmez et variez. Répartissez les requêtes et faites tourner de nombreuses requêtes plutôt que de parcourir un terme à toute vitesse. Le trafic en rafales et répétitif est le moyen le plus rapide d'être mis au défi.
  • Misez sur la rotation. Un pool d'IPs résidentielles répartit les requêtes sur de nombreuses adresses d'utilisateurs réels pour qu'aucune ne dépasse une limite. La Crawling API gère cela pour vous ; si vous construisez votre propre pile, c'est la partie à soigner, et notre guide sur la rotation de proxies pour les résultats Google l'approfondit.
  • Réessayez gratuitement en cas d'échec. Crawlbase ne facture pas les requêtes échouées, donc une URL bloquée ou indisponible ne vous coûte rien à réessayer. Construisez un petit mécanisme de nouvelle tentative avec backoff plutôt que d'ignorer les pages.
  • Surveillez la dérive de mise en page. Google envoie souvent des changements de SERP. Un parseur géré absorbe la plupart de ces changements pour vous, mais si un champ commence à revenir vide, la mise en page a probablement bougé, vérifiez donc la forme de la réponse avant de supposer que votre code est faux.

Si vous préférez acheminer votre propre trafic via un pool rotatif au lieu d'utiliser l'API gérée, le Smart AI Proxy vous offre la même rotation d'IP résidentielles comme point d'entrée proxy intégrable. Pour les travaux qui nécessitent de se déployer sur de nombreuses requêtes à la fois, un crawler asynchrone vous permet de mettre des URLs en file d'attente et de collecter les résultats au fur et à mesure plutôt que d'attendre chaque requête en série. Et pour le problème spécifique des pages de consentement et de vérification, notre tutoriel sur contourner les CAPTCHA en extrayant Google va plus loin que ce que nous pouvons couvrir ici.

Est-il légal d'extraire les résultats de recherche Google ?

La possibilité d'extraire Google dépend des conditions d'utilisation de Google, de votre juridiction et de ce que vous faites des données. Extraire les pages de résultats de recherche publics, les titres, liens, extraits et positions que quiconque peut voir sans se connecter, est le type de données publiques que les tribunaux de plusieurs juridictions ont traité comme collectables. Cela dit, les conditions d'utilisation de Google restreignent l'accès automatisé à ses services, donc le scraping peut aller à l'encontre de ces conditions, quelle que soit la prudence de vos outils. Aucun des codes ici ne change cela ; il rend simplement la partie technique fonctionnelle. Lisez les conditions de Google et son robots.txt, et traitez les deux comme la frontière de ce que vous collectez et à quelle vitesse.

Quelques lignes à respecter. Collectez uniquement les données SERP publiques et restez à l'écart de tout ce qui est derrière une connexion, des données personnelles sur des individus et des médias protégés par droit d'auteur que vous redistribueriez depuis les destinations liées. Maintenez votre volume de requêtes suffisamment modeste pour ne pas surcharger l'infrastructure de Google, et rythmez votre exploration plutôt que de la lancer à pleine vitesse. L'objectif est des données publiques structurées pour la recherche, le SEO et l'analyse de marché, pas la republication en masse de l'index de Google.

Là où une API officielle existe, préférez-la. Google propose des produits agréés pour des besoins spécifiques, la Custom Search JSON API pour la recherche programmatique sur un périmètre défini, et Search Console pour les données de performance de votre propre site. Ceux-ci vous donnent un accès structuré dans des termes clairs. Ils ne couvrent pas tous les cas d'utilisation qu'un scraper SERP couvre, ce qui explique pourquoi l'extraction de données publiques persiste, mais quand votre projet s'adapte à un point d'accès officiel, ce point d'accès est la voie plus propre. Si vous pesez les compromis plus larges, notre article sur les défis de l'extraction des résultats Google mérite une lecture.

Récapitulatif

Points clés

  • Un SERP est composé de nombreux blocs, pas d'une liste. Les résultats organiques, les annonces, People Also Ask, le panneau de connaissances et le pack local sont des blocs indépendants ; analysez chacun séparément.
  • Les requêtes ordinaires sont bloquées. Google rend les blocs de fonctionnalités avec JavaScript et met au défi le trafic de datacenter, vous avez donc besoin d'une page rendue depuis une IP résidentielle de confiance.
  • API gérée ou fait maison. Une API SERP-capable combine le rendu, la rotation et la gestion des CAPTCHA en un seul appel ; la pile faite maison fonctionne mais la maintenance est le vrai coût.
  • Paginez avec l'offset start. Augmentez start par paliers de dix pour aller plus loin, utilisez numberOfResults comme borne, et rythmez les requêtes avec un sleep.
  • Restez sur les données publiques. Respectez les CGU de Google et robots.txt, évitez les connexions et les données personnelles, maintenez un volume modeste, et préférez une API officielle quand elle correspond.

Foire aux questions

De quoi est composé un SERP Google ?

Une page de résultats de moteur de recherche est assemblée à partir de plusieurs blocs distincts : les résultats organiques (les pages web classées), les annonces (résultats payants sur les requêtes commerciales), People Also Ask (un encadré de questions extensible), le panneau de connaissances (un encadré d'entité du Knowledge Graph de Google), le pack local (une carte plus les entreprises à proximité) et les recherches associées. Les blocs qui apparaissent dépendent de l'intention de la requête, donc un bon scraper lit chaque bloc indépendamment et tolère ceux qui sont absents.

Pourquoi une requête ordinaire échoue-t-elle sur Google ?

Deux raisons se cumulent. Une grande partie d'un SERP moderne, notamment les blocs de fonctionnalités, est rendue avec JavaScript, donc une requête HTTP brute voit un squelette plutôt que la page finale. Google surveille aussi attentivement l'automatisation et met au défi le trafic provenant d'IPs de datacenter ou les requêtes sans vrais en-têtes de navigateur avec une page de consentement ou un CAPTCHA. Récupérer via une API SERP-capable qui utilise des IPs résidentielles rotatives et le rendu fait ressembler la requête à un visiteur ordinaire.

Dois-je utiliser une API gérée ou construire mon propre scraper ?

Pour un projet ponctuel, la pile faite maison (un navigateur headless plus des proxies rotatifs) peut convenir. Pour le suivi de positions en production ou la recherche à grande échelle, une API gérée est généralement le choix pragmatique car le travail continu consiste à maintenir le scraper non bloqué, pas à l'écrire : les proxies expirent, les empreintes deviennent obsolètes et Google envoie des changements de mise en page. Les concepts d'analyse se transfèrent entre les deux, donc le choix concerne surtout qui maintient l'infrastructure.

Comment extraire les résultats de recherche Google avec Python spécifiquement ?

L'exemple ici utilise le wrapper Python Crawlbase avec le scraper google-serp pour obtenir du JSON analysé sans écrire de sélecteurs. Pour un tutoriel Python complet étape par étape qui construit la requête et l'analyse pas à pas, consultez notre tutoriel ciblé sur comment extraire les résultats de recherche Google avec Python, qui est le complément de ce pilier plus large.

Comment paginer à travers davantage de résultats Google ?

Utilisez le paramètre de requête start, un offset dans les résultats plutôt qu'un numéro de page. Avec environ dix résultats organiques par page, start=10 est la deuxième page, start=20 la troisième, et ainsi de suite. Construisez chaque URL avec l'offset, récupérez-la via l'API, analysez avec la même fonction, et faites une pause de quelques secondes entre les requêtes pour rythmez l'exploration plutôt que de la bombarder.

Est-il légal d'extraire les résultats de recherche Google ?

Les données SERP publiques, les titres, liens, extraits et positions que quiconque peut voir sans compte, sont généralement traitées comme collectables, mais les conditions d'utilisation de Google restreignent l'accès automatisé, donc le scraping peut entrer en conflit avec ces conditions. Lisez les conditions de Google et robots.txt, évitez les connexions et les données personnelles, maintenez un volume modeste, et préférez un point d'accès officiel comme la Custom Search JSON API ou Search Console quand il correspond à votre cas d'utilisation.

Commencer à construire

Crawlez n'importe quel site à grande échelle, sans combattre l'infrastructure.

Crawlbase gère les proxies, les empreintes et les CAPTCHA afin que votre équipe livre des pipelines de données au lieu de maintenir la plomberie de crawl. 1 000 requêtes gratuites, sans carte requise.

En libre-service · Sans appel commercial requis · Volumes de crawl entreprise disponibles