Le scraping vous donne des lignes de données web structurées, mais des lignes brutes ne sont pas des insights. Dès que vous souhaitez poser des questions sur ces données, quels produits ont baissé en prix, quelles catégories concentrent le plus d'avis, quelle est la note médiane par marque, vous voulez du SQL. GoogleSQL est le dialecte SQL qui sous-tend Google Cloud SQL et BigQuery, et il s'associe parfaitement à un scraping Crawlbase : collectez les données une seule fois, chargez-les dans une table gérée, puis interrogez-les avec du SQL ordinaire plutôt que d'écrire des scripts d'analyse jetables à chaque fois.

Ce guide est un tutoriel exécutable de ce pipeline. Vous récupérez des données de produits structurées via l'Crawling API, les sauvegardez en CSV, les chargez dans une table Google Cloud SQL, puis écrivez des requêtes GoogleSQL : filtres, agrégats, classement, et quelques patterns que vous réutiliserez sur vos propres sources. L'exemple de scraping utilise des résultats de recherche Amazon publics, mais la partie SQL s'applique à tout ensemble de données structurées que vous collectez.

Ce que vous allez construire

Un petit pipeline de données qui aboutit à une table SQL interrogeable. L'exemple en cours extrait des résultats de recherche Amazon pour un produit, mais toutes les étapes en aval du scraping sont indépendantes de la source. Vous produisez :

  • Un CSV d'enregistrements scrapés : une ligne par produit, avec le nom, le prix, la devise, la note et le nombre d'avis.
  • Une table Cloud SQL : une table PostgreSQL typée qui contient les lignes importées.
  • Un ensemble de requêtes : des requêtes GoogleSQL réutilisables pour filtrer, agréger, classer et résumer les données.
  • Une boucle reproductible : un pattern que vous pouvez pointer sur n'importe quelle autre source scrapée en changeant le scraper et le schéma de table.

Ce qu'est GoogleSQL, en termes simples

GoogleSQL est le nom donné au dialecte SQL utilisé dans les services de bases de données gérées de Google Cloud. Dans Cloud SQL, c'est le SQL standard que vous écrivez contre une instance MySQL, PostgreSQL ou SQL Server gérée, où Google gère le matériel et la plupart de la configuration opérationnelle pour vous. Dans BigQuery, c'est le dialecte utilisé pour analyser de très grands ensembles de données. Dans les deux cas, l'idée est la même : vous ne gérez pas vos propres serveurs, vous vous connectez à un moteur géré, écrivez des requêtes, et laissez Google gérer le backend.

Pour ce tutoriel, nous utilisons Cloud SQL avec PostgreSQL car c'est le chemin le plus direct d'un CSV de données scrapées à une table interrogeable. Le GoogleSQL que vous écrivez ici est du SQL ordinaire : SELECT, WHERE, GROUP BY, ORDER BY et des fonctions de fenêtre. La valeur n'est pas une syntaxe exotique, c'est d'avoir vos données web scrapées dans une table gérée où ces requêtes s'exécutent en millisecondes.

Prérequis

Quelques éléments doivent être en place avant d'écrire du code. Aucun ne prend longtemps.

Un compte Crawlbase et un token. Inscrivez-vous, ouvrez votre tableau de bord et copiez votre token de requêtes normales depuis la page de documentation du compte. Crawlbase inclut jusqu'à 20 000 requêtes gratuites pour démarrer, ce qui est largement suffisant pour ce guide. Traitez le token comme un mot de passe et gardez-le hors du contrôle de version.

Python 3 et la bibliothèque requests. Vérifiez votre version avec python --version, puis installez la seule dépendance dont le scraper a besoin. json et csv sont inclus dans la bibliothèque standard.

Un compte Google Cloud. Vous avez besoin d'un projet avec la facturation activée pour créer une instance Cloud SQL. Google offre des crédits gratuits aux nouveaux comptes, vous pouvez donc suivre ce guide sans vous engager à un plan payant dès le départ. Une familiarité de base avec SQL est utile mais pas requise, les requêtes ici sont expliquées ligne par ligne.

Configurer le projet

Créez un répertoire de travail et installez la seule bibliothèque utilisée par le scraper.

bash
python --version

mkdir googlesql-crawlbase && cd googlesql-crawlbase

pip install requests

C'est toute la configuration locale. L'étape de scraping s'exécute en Python, et tout ce qui suit se passe dans Google Cloud SQL, où vous écrivez du GoogleSQL directement dans la console ou via le client SQL de votre choix.

Étape 1 : Scraper des données structurées vers CSV

Le premier travail est de collecter des données qui valent la peine d'être interrogées. Le script ci-dessous appelle la Crawlbase Crawling API avec le scraper amazon-serp, qui retourne du JSON analysé pour une page de résultats de recherche Amazon, puis aplatit les produits dans un CSV. Sauvegardez-le sous crawl_data.py et remplacez l'espace réservé du token par le vôtre.

python
import csv
import json
import requests

API_TOKEN = "YOUR_CRAWLBASE_TOKEN"
API_ENDPOINT = "https://api.crawlbase.com/"

def crawl_data(search_url):
    params = {
        "token": API_TOKEN,
        "url": search_url,
        "scraper": "amazon-serp",
    }
    response = requests.get(API_ENDPOINT, params=params)
    response.raise_for_status()
    return response.text

FIELDNAMES = ["name", "price", "currency", "rating", "reviews"]

def save_to_csv(payload, filename="data.csv"):
    products = payload.get("body", {}).get("products", [])
    if not products:
        print("No products found")
        return
    with open(filename, "w", newline="", encoding="utf-8") as f:
        writer = csv.DictWriter(f, fieldnames=FIELDNAMES)
        writer.writeheader()
        for p in products:
            writer.writerow({
                "name": p.get("name", ""),
                "price": p.get("rawPrice", ""),
                "currency": p.get("currency", ""),
                "rating": p.get("customerReview", ""),
                "reviews": p.get("customerReviewCount", ""),
            })
    print(f"Saved {len(products)} products to {filename}")

if __name__ == "__main__":
    raw = crawl_data("https://www.amazon.com/s?k=wireless+headphones")
    save_to_csv(json.loads(raw), "data.csv")

Exécutez-le avec python crawl_data.py. La Crawling API effectue l'analyse pour vous, donc au lieu d'écrire des sélecteurs vous recevez un tableau products propre et choisissez les champs qui vous intéressent. Le script en conserve cinq : name, price (pris du rawPrice numérique pour qu'il s'importe comme un nombre), currency, rating et reviews. Le résultat est un data.csv prêt à charger dans Cloud SQL.

Crawlbase Crawling API

Le scraper amazon-serp ci-dessus retourne du JSON analysé au lieu du HTML brut, ce qui vous évite d'écrire et de maintenir des sélecteurs CSS. La Crawling API rend la page, fait tourner les IPs résidentielles, gère les CAPTCHAs côté serveur, et retourne des champs structurés, ce qui est exactement le type d'entrée propre qu'une table SQL attend. Pointez-la sur une page de recherche publique sur le niveau gratuit et vous avez des données prêtes pour des requêtes en un seul appel.

Étape 2 : Créer une instance et une base de données Cloud SQL

Avant de pouvoir interroger les données, elles ont besoin d'un endroit où résider. Dans la console Google Cloud, configurez une instance PostgreSQL gérée et une base de données à l'intérieur.

  • Ouvrez la console Google Cloud et créez ou sélectionnez un projet avec la facturation activée.
  • Activez l'API Cloud SQL Admin depuis l'écran APIs and Services.
  • Allez sur la page des instances Cloud SQL et cliquez sur Créer une instance, puis choisissez PostgreSQL.
  • Définissez un ID d'instance, une région et un mot de passe pour l'utilisateur par défaut, puis créez l'instance.
  • Ouvrez la nouvelle instance, allez dans l'onglet Databases et créez une base de données nommée analytics_example_db.

Google provisionne et gère le moteur pour vous. Une fois l'instance en cours d'exécution et la base de données existante, vous pouvez ouvrir Cloud SQL Studio, l'éditeur de requêtes intégré, et exécuter du GoogleSQL directement.

Étape 3 : Définir la table

Ouvrez Cloud SQL Studio, connectez-vous à analytics_example_db, démarrez un nouvel onglet de requête et créez une table qui correspond aux colonnes du CSV. Les types sont importants ici : price et reviews sont déclarés comme numériques pour que vous puissiez les sommer, les moyenner et les comparer ensuite, tandis que les champs texte restent en TEXT ou VARCHAR.

sql
CREATE TABLE "public"."amazon_products" (
  "name" TEXT,
  "price" DECIMAL(10, 2),
  "currency" VARCHAR(10),
  "rating" DECIMAL(3, 2),
  "reviews" INTEGER
);

Cela crée une table amazon_products vide avec cinq colonnes typées. Les types numériques sont l'intérêt de tout l'exercice : un prix stocké en DECIMAL peut être moyenné et classé, tandis qu'un prix stocké en texte ne peut qu'être affiché. Définir correctement le schéma ici est ce qui rend possibles les requêtes de l'étape 5.

Étape 4 : Importer le CSV dans la table

Une fois la table prête, chargez les lignes scrapées. Cloud SQL importe les fichiers CSV depuis un bucket Cloud Storage.

  • Allez sur la page des instances Cloud SQL et ouvrez votre instance.
  • Choisissez Import et sélectionnez CSV comme format de fichier.
  • Téléchargez data.csv dans un bucket Cloud Storage et sélectionnez-le comme fichier source.
  • Définissez analytics_example_db comme base de données de destination et amazon_products comme table.
  • Cliquez sur Import.
Ligne d'en-tête

Le script écrit une ligne d'en-tête dans le CSV. Lors de l'importation, indiquez à Cloud SQL de sauter la première ligne pour que les noms de colonnes ne soient pas chargés comme une ligne de données. Si votre client ne propose pas ce réglage, supprimez la ligne d'en-tête du fichier avant de le télécharger.

Une fois l'importation terminée, les lignes sont interrogeables. Tout ce qui suit est du GoogleSQL.

Étape 5 : Interroger les données avec GoogleSQL

C'est là que les données structurées portent leurs fruits. Chaque requête ci-dessous s'exécute dans Cloud SQL Studio ou dans tout client PostgreSQL connecté à l'instance. Commencez par les bases et montez en complexité.

Lire tout. La requête la plus simple confirme que l'importation a fonctionné et vous montre la forme des données.

sql
SELECT * FROM amazon_products LIMIT 10;

Filtrer et trier. Trouvez les produits bien notés en dessous d'un plafond de prix, du moins cher au plus cher. C'est le genre de question fastidieux dans un tableur et trivial en SQL.

sql
SELECT name, price, rating, reviews
FROM amazon_products
WHERE price < 100
  AND reviews > 500
ORDER BY price ASC;

Agréger. Résumez l'ensemble des résultats en une seule ligne : combien de produits, leur coût moyen, et l'écart de prix.

sql
SELECT
  COUNT(*) AS total_products,
  ROUND(AVG(price), 2) AS avg_price,
  MIN(price) AS cheapest,
  MAX(price) AS most_expensive
FROM amazon_products;

Regrouper et classer. Quand vos données ont une colonne de catégorie, GROUP BY transforme une table plate en comparaison. Ici l'exemple regroupe par devise, mais la même forme fonctionne pour la marque, la catégorie ou toute colonne que vous scrapez.

sql
SELECT
  currency,
  COUNT(*) AS listings,
  ROUND(AVG(rating), 2) AS avg_rating
FROM amazon_products
GROUP BY currency
ORDER BY listings DESC;

Fonction de fenêtre. Classez les produits par nombre d'avis sans fusionner les lignes, afin de conserver chaque produit à côté de sa position dans l'ensemble. RANK() est du GoogleSQL standard et fonctionne de la même façon dans Cloud SQL et BigQuery.

sql
SELECT
  name,
  reviews,
  RANK() OVER (ORDER BY reviews DESC) AS popularity_rank
FROM amazon_products
ORDER BY popularity_rank
LIMIT 10;

À quoi ressemble le résultat

La requête de classement retourne une ligne par produit avec sa place dans l'ordre, de sorte que les articles les plus commentés remontent au sommet tandis que chaque produit conserve sa propre ligne.

csv
name,reviews,popularity_rank
Wireless Over-Ear Headphones,12840,1
Noise Cancelling Earbuds,9325,2
Bluetooth Sport Headphones,7710,3
Studio Monitor Headphones,4188,4
Budget Wireless Earbuds,3902,5

La requête d'agrégation se réduit à une seule ligne de résumé : le nombre, le prix moyen et la fourchette de prix sur toute la table. Parce que les données sont typées et indexées dans un moteur géré, ces requêtes retournent immédiatement et restent tout aussi rapides à mesure que la table passe de quelques lignes à plusieurs centaines de milliers.

Adapter cela à vos propres sources

Rien dans la partie SQL n'est spécifique à Amazon. Pour exécuter le même pipeline sur une source différente, trois choses changent et le reste reste en place.

  • Changer de scraper. Pointez la Scraper API sur une autre cible prise en charge, ou récupérez du HTML brut via l'Crawling API et analysez-le vous-même. Le résultat souhaité est toujours un CSV plat avec des colonnes cohérentes.
  • Adapter le schéma. Modifiez l'instruction CREATE TABLE pour que les noms et types de colonnes correspondent à vos nouveaux champs. Gardez tout ce que vous allez agréger ou comparer comme type numérique.
  • Réutiliser les requêtes. Les patterns de filtre, d'agrégat, de regroupement et de classement ci-dessus s'appliquent à n'importe quelle table. Changez les noms de colonnes et ils s'adaptent à un nouveau jeu de données sans changement.

Pour des tâches plus importantes, collectez des données avec le Crawler asynchrone, qui met les requêtes en file d'attente et livre les résultats via webhook, puis importez par lot dans Cloud SQL selon un calendrier. Si vous souhaitez un traitement plus approfondi de la partie chargement et analyse, le guide sur le stockage et l'analyse de données scrapées en SQL couvre la conception de schéma et l'indexation, et construire un pipeline de données web évolutif couvre l'exécution de cela sur une base récurrente.

Scraper de façon responsable

Le SQL est libre d'utilisation, mais le scraping qui l'alimente doit suivre quelques règles. Collectez uniquement des données publiques, les noms de produits, les prix, les notes et les nombres d'avis que tout visiteur peut voir sans se connecter, et restez à l'écart de tout ce qui se trouve derrière une authentification. Respectez les conditions d'utilisation de chaque source et son fichier robots.txt, et gardez votre taux de requêtes raisonnable pour ne pas surcharger le site. Quand une source publie une API officielle, préférez-la pour un usage massif ou commercial. Et si votre ensemble de données comprend des données personnelles, traitez-les selon les règles de confidentialité pertinentes comme le RGPD ou le CCPA : agrégez-les, ne profilez pas des individus, et ne stockez que ce dont vous avez besoin.

Récapitulatif

Points clés

  • GoogleSQL est du SQL ordinaire sur un moteur géré. C'est le dialecte utilisé par Cloud SQL et BigQuery, donc les requêtes SELECT, GROUP BY et de fenêtre que vous connaissez déjà s'appliquent toutes, avec Google qui gère le backend.
  • Scrapez d'abord vers un CSV propre. La Crawling API retourne du JSON analysé, donc vous choisissez les champs par leur nom et écrivez un CSV plat au lieu de maintenir des sélecteurs.
  • Les types font ou défont les requêtes. Déclarer price et reviews comme numériques dans l'étape CREATE TABLE est ce qui vous permet de les moyenner, de les comparer et de les classer ensuite.
  • Les patterns de requêtes sont réutilisables. Les requêtes de filtre, d'agrégat, de regroupement et de classement se reportent à n'importe quel ensemble de données scrapées en changeant uniquement les noms de colonnes.
  • Adaptez en changeant trois choses. Changez le scraper, adaptez le schéma de table et réutilisez les requêtes pour pointer tout le pipeline vers une nouvelle source.

Foire aux questions

Quelle est la différence entre GoogleSQL dans Cloud SQL et dans BigQuery ?

GoogleSQL est le dialecte SQL partagé, mais le moteur sous-jacent diffère. Cloud SQL exécute des instances gérées de MySQL, PostgreSQL ou SQL Server et convient aux ensembles de données transactionnels de taille modérée comme une table de produits scrapés. BigQuery est un entrepôt sans serveur conçu pour de très grandes requêtes analytiques. La syntaxe de requête de ce guide, y compris la fonction de fenêtre RANK(), fonctionne dans les deux. Commencez avec Cloud SQL pour un projet de cette taille et passez à BigQuery seulement quand vos données dépassent une seule instance.

Dois-je payer pour utiliser Google Cloud SQL ?

Vous avez besoin que la facturation soit activée sur votre projet Google Cloud pour créer une instance Cloud SQL, mais les nouveaux comptes reçoivent des crédits gratuits, vous pouvez donc compléter ce tutoriel sans payer de votre poche. Arrêtez ou supprimez l'instance quand vous avez terminé pour éviter des frais continus. Le côté Crawlbase inclut jusqu'à 20 000 requêtes gratuites, ce qui est plus que suffisant pour le scraping dans ce tutoriel.

Puis-je utiliser cette méthode pour des sources autres qu'Amazon ?

Oui. Le pipeline est indépendant de la source après le scraping. Pointez la Scraper API sur une autre cible prise en charge, ou récupérez et analysez une page via la Crawling API, puis produisez un CSV avec des colonnes cohérentes. Mettez à jour le schéma CREATE TABLE pour correspondre à vos nouveaux champs et les mêmes étapes d'importation et de requête s'appliquent sans changement.

Que se passe-t-il si mon format de données change plus tard ?

Si une source ajoute des champs ou si vous décidez d'en capturer davantage, vous ne recommencez pas de zéro. Utilisez une instruction ALTER TABLE pour ajouter des colonnes à la table existante, puis importez les nouvelles lignes. Vos données existantes restent intactes, et toute requête qui ne fait pas référence aux nouvelles colonnes continue de fonctionner exactement comme avant.

Pourquoi scraper vers CSV plutôt qu'insérer des lignes directement ?

Un CSV est le format d'échange le plus simple et Cloud SQL l'importe nativement, ce qui maintient le scraping et le chargement découplés. Vous pouvez inspecter le fichier, le réimporter ou le charger dans un système différent sans relancer le scraping. Pour des pipelines à fort volume ou continus, vous inséreriez des lignes par programmation, mais pour un lot périodique le chemin CSV-puis-import présente le moins d'éléments mobiles.

Ces requêtes fonctionnent-elles dans des clients SQL standard ?

Oui. Une fois l'instance Cloud SQL en cours d'exécution, vous pouvez connecter tout client compatible PostgreSQL, le Cloud SQL Studio intégré, psql ou un outil de bureau, et exécuter les mêmes requêtes GoogleSQL. Les requêtes de ce guide utilisent des fonctionnalités SQL standard, elles sont donc portables entre les clients PostgreSQL plutôt que liées à un seul éditeur.

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