Une API de web scraping s’occupe pour vous des parties difficiles de la collecte de pages web : elle choisit le proxy, lance le navigateur quand une page en a besoin, relance les échecs, et vous renvoie le HTML ou les données demandées. Vous envoyez une seule requête avec une URL ; le service gère tout ce qui se passe entre vous et le site.
Ce guide vous emmène de votre première requête à un petit scraper fiable, en utilisant le Web Scraping API de Shifter comme exemple. Les étapes et les schémas sont les mêmes pour la plupart des services de ce type. Si vous voulez d’abord comprendre ce qui se passe derrière la requête, notre article explicatif sur le fonctionnement d’une API de web scraping le détaille.
Étape 1 : obtenir une clé API
Chaque requête est authentifiée avec une clé API. Dans le panneau de Shifter, ouvrez Web Scraping API, puis API Keys, et copiez une clé active.
Gardez la clé hors de votre code. Stockez-la dans une variable d’environnement, pour qu’elle ne se retrouve jamais dans un dépôt ou une capture d’écran :
export SHIFTER_SCRAPER_KEY="your-key-here"
Étape 2 : effectuer votre première requête
L’API est un unique endpoint, https://scrape.shifter.io/v1. Passez votre clé et la page que vous souhaitez en tant que paramètres de requête :
curl "https://scrape.shifter.io/v1?api_key=$SHIFTER_SCRAPER_KEY&url=https://example.com"
La réponse est le HTML de la page, récupéré via les proxies de l’API. C’est tout ce dont une requête basique a besoin.
Étape 3 : activer le rendu JavaScript quand la page en a besoin
De nombreux sites modernes envoient une page quasiment vide et construisent le contenu dans le navigateur avec JavaScript. Si le HTML que vous récupérez ne contient pas les données que vous voyez dans votre navigateur, ajoutez render_js=1. L’API charge alors la page dans un navigateur headless et renvoie le résultat rendu. Chez Shifter, une requête avec rendu coûte le même prix qu’une requête simple.
Deux réglages associés aident avec les pages lentes :
wait_for_cssattend qu’un élément spécifique apparaisse avant de renvoyer la réponse, pour que vous n’obteniez pas la page avant que ses données aient été chargées.timeoutdonne plus de temps aux sites lents.
Le rendu est plus lent qu’une simple récupération, n’utilisez-le donc que pour les pages qui en ont besoin. Notre guide sur le scraping de sites riches en JavaScript explique comment le repérer.
Étape 4 : obtenir du JSON plutôt que du HTML
Analyser le HTML vous-même est l’endroit où la plupart des scrapers échouent. À la place, décrivez les champs que vous voulez avec extract_rules : un objet JSON associant chaque nom de champ à un sélecteur CSS et à ce qu’il faut en retourner.
output | Retourne |
|---|---|
text | Le texte de l’élément |
html | Le HTML interne de l’élément |
@href, @src, etc. | La valeur d’un attribut |
Par exemple, {"title": {"selector": "h1", "output": "text"}} renvoie {"title": "Example Domain"} pour example.com. De nombreuses pages intègrent également déjà leurs données sous forme de JSON structuré ; notre guide sur l’extraction de JSON-LD plutôt que l’analyse du HTML montre comment l’utiliser.
Étape 5 : gérer correctement les erreurs
Tout scraper rencontre des échecs : sites lents, pages qui ne veulent pas se rendre, trop de requêtes en même temps. L’API vous indique ce qui s’est mal passé via le code de statut, et la bonne réponse dépend de celui que vous obtenez :
| Statut | Signification | Que faire |
|---|---|---|
200 | Succès | Utilisez la réponse |
400, 401, 403 | Un problème avec votre requête, votre clé ou les fonctionnalités de votre plan | Corrigez-le ; relancer ne servira à rien |
408 | Le site cible a expiré (timeout) | Relancez, éventuellement avec un timeout plus élevé |
422 | Le rendu de la page a échoué | Relancez ; vérifiez que le site fonctionne dans un navigateur normal |
429 | Trop de requêtes simultanées pour votre plan | Attendez, puis relancez |
500 | Une erreur interne | Relancez après un court délai |
Chez Shifter, les requêtes échouées ne sont pas facturées ; vous payez un crédit pour chaque réponse réussie. L’API relance également certains échecs en interne avant de répondre, et ceux-ci comptent comme un seul appel.
Assembler le tout
Voici un petit assistant Python qui enveloppe les cinq étapes : il lit la clé depuis l’environnement, ajoute le rendu et l’extraction quand vous le demandez, relance les erreurs qui en valent la peine avec une pause croissante, et s’arrête immédiatement sur celles qui nécessitent une correction.
import json
import os
import time
import requests
API = "https://scrape.shifter.io/v1"
RETRY = {408, 422, 429, 500} # worth another try after a pause
STOP = {400, 401, 403} # fix the request; retrying will not help
def scrape(url, render_js=False, extract_rules=None, attempts=3, session=None, wait=2.0):
"""Fetch one page through the Web Scraping API; returns text, or parsed JSON with extract_rules."""
session = session or requests.Session()
params = {"api_key": os.environ["SHIFTER_SCRAPER_KEY"], "url": url}
if render_js:
params["render_js"] = 1
if extract_rules:
params["extract_rules"] = json.dumps(extract_rules)
for attempt in range(1, attempts + 1):
response = session.get(API, params=params, timeout=120)
if response.status_code == 200:
return response.json() if extract_rules else response.text
if response.status_code in STOP or attempt == attempts or response.status_code not in RETRY:
raise RuntimeError(f"{url}: HTTP {response.status_code} {response.text[:200]}")
time.sleep(wait * attempt) # back off a little more each time
Pour l’utiliser :
from scrape_api import scrape
html = scrape("https://example.com")
data = scrape("https://example.com", extract_rules={"title": {"selector": "h1", "output": "text"}})
print(data["title"])
Nous avons testé la construction des requêtes, les relances et les conditions d’arrêt de l’assistant face à des réponses simulées pour chacun des codes de statut ci-dessus.
Si vous débutez avec la logique de relance, notre guide sur la relance et le backoff pour les scrapers web explique pourquoi la pause augmente à chaque tentative.
Étape 6 : passer à l’échelle
Une fois que les requêtes individuelles fonctionnent, trois éléments comptent à mesure que vous grandissez :
- Concurrence. Envoyez plusieurs requêtes à la fois avec un pool de threads ou un client asynchrone. Chaque plan a une limite de concurrence (de 20 à 500 requêtes simultanées chez Shifter, selon le plan) ; restez en dessous et considérez un
429comme un signal pour ralentir. - Localisation et type de proxy. Utilisez le paramètre
countrypour récupérer une page telle qu’elle apparaît dans un pays spécifique. Sur les plans Growth et supérieurs,premium_proxyfait passer les requêtes par des IP résidentielles pour les sites qui bloquent le trafic de centres de données. - Sessions. Pour les flux à plusieurs étapes, un
session_idconserve la même IP et les mêmes cookies à travers les requêtes.
Quand les données commencent à affluer, stockez-les quelque part où vous pouvez les interroger. Notre guide sur le transfert des données d’une API de web scraping vers SQL couvre un pipeline propre de la réponse à la table.
Erreurs courantes de débutants
- Coder la clé API en dur. Utilisez une variable d’environnement ou un gestionnaire de secrets.
- Tout rendre. Essayez d’abord une requête simple ; ne rendez que les pages qui en ont besoin.
- Tout relancer. Un
401échouera indéfiniment. Ne relancez que les erreurs qui peuvent réussir plus tard. - Analyser le HTML à la main. Utilisez les règles d’extraction ou le JSON intégré quand c’est possible.
- Ignorer les limites de concurrence. Trop de requêtes en parallèle produisent des
429, pas de la vitesse.
FAQ
Qu’est-ce qu’une API de web scraping ?
Un service qui récupère des pages web pour vous via ses propres proxies et navigateurs, gère les relances et les blocages, et renvoie le HTML ou les données extraites en réponse à une seule requête.
Dois-je savoir coder pour utiliser une API de web scraping ?
Un peu. Une seule requête fonctionne depuis la ligne de commande avec curl, mais la plupart des projets réels utilisent un court script en Python ou dans un autre langage pour envoyer des requêtes, gérer les erreurs et stocker les résultats.
Quand dois-je activer le rendu JavaScript ?
Quand le HTML renvoyé sans rendu ne contient pas le contenu que vous voyez dans votre navigateur. De nombreux sites construisent leurs pages avec JavaScript, et le rendu renvoie la page telle qu’un navigateur l’afficherait.
Les requêtes échouées coûtent-elles des crédits ?
Chez Shifter, non. Vous êtes facturé d’un crédit par réponse réussie, et les requêtes échouées, y compris les erreurs provenant du site cible, sont gratuites.
En résumé
Utiliser une API de web scraping se résume à quelques habitudes : garder la clé dans l’environnement, commencer avec des requêtes simples et n’ajouter le rendu que là où c’est nécessaire, demander du JSON avec des règles d’extraction plutôt que d’analyser le HTML, ne relancer que les erreurs qui peuvent réussir plus tard, et respecter la concurrence de votre plan. L’assistant ci-dessus couvre tout cela en une vingtaine de lignes. Les plans et limites sont disponibles sur la page de tarification du Web Scraping API.