Scraping Web avec IA : Extraction LLM, Prompt-to-JSON & Coût

L'extraction LLM transforme n'importe quelle page en JSON propre à partir d'un prompt en anglais simple — pas de sélecteurs à maintenir. Mais le modèle ne peut pas récupérer la page et le HTML brut consomme rapidement des tokens. Voici comment bien faire.

Le scraping web avec IA signifie diriger un modèle de langage vers une page et demander, en anglais simple, les champs que vous souhaitez récupérer en JSON — pas de sélecteurs CSS à écrire, pas de parseur à maintenir lorsque la mise en page change. C'est véritablement transformateur pour les extractions désordonnées, variées ou ponctuelles. C'est aussi largement mal compris, c'est pourquoi les gens finissent par payer pour scraper quelques centaines de pages et obtiennent des données hallucinées en retour. Deux faits corrigent la plupart de cette confusion : un modèle de langage ne peut pas récupérer une page web — il ne raisonne que sur le texte que vous lui fournissez — et lui fournir du HTML brut est la façon la plus rapide de brûler votre budget de tokens. Ce guide couvre le schéma d'extraction qui fonctionne, quand il surpasse les sélecteurs, et comment garder à la fois le coût et les hallucinations sous contrôle.

Ce que personne ne dit : le modèle ne peut pas récupérer

La partie difficile du scraping avec IA n'est pas l'IA. Un chatbot ne peut pas charger de manière fiable une page en direct — il a besoin d'un moteur dédié pour récupérer d'abord le HTML, puis il raisonne sur le texte que vous fournissez. Ainsi, un pipeline d'extraction LLM est en réalité un pipeline de scraping avec un parseur intelligent ajouté à la fin, et c'est la moitié scraping où les choses se cassent : gestion des bots, rendu JavaScript, blocages IP. Résolvez la récupération avec des proxies et une couche de rendu, et l'extraction devient la partie facile. La façon propre d'obtenir des pages est une API de scraping qui gère la rotation et le rendu et retourne du markdown, ce qui — comme la section suivante le montre — est également l'entrée la moins chère possible pour un modèle :

import requests

def fetch_markdown(url, api_key):
    r = requests.get(
        "https://api.quantumproxies.io/scrape",
        params={"url": url, "render": "auto", "output": "markdown"},
        headers={"Authorization": f"Bearer {api_key}"},
        timeout=(5, 40),
    )
    r.raise_for_status()
    return r.json()["markdown"]  # nav/ads stripped, ready for the model

Pourquoi le markdown, pas le HTML, est le véritable levier de coût

Le principal facteur de coût du scraping avec IA est le nombre de tokens que vous passez à travers le modèle, et le HTML brut est principalement composé de tokens que vous ne voulez pas : styles en ligne, balises de script, attributs de suivi, navigation, pieds de page. Convertissez la page en markdown propre — ou extrayez seulement le contenu principal — avant l'extraction et vous réduisez systématiquement la taille de l'entrée d'un ordre de grandeur, ce qui réduit le coût par le même facteur et, en bonus, réduit les hallucinations car le modèle voit le contenu au lieu du chrome. C'est pourquoi le markdown en premier est la norme pour alimenter les modèles, le même principe derrière l'alimentation des LLMs avec des données web fraîches. Si vous ne retenez qu'une chose de cet article : ne jamais envoyer au modèle la source brute de la page.

Diagramme du pipeline d'extraction LLM : récupérer la page avec des proxies ou une API de scraping, la nettoyer en markdown, faire un prompt avec un schéma, puis valider la sortie JSON
Le modèle ne touche jamais le web en direct. La récupération et le nettoyage se font d'abord, le markdown réduit la facture de tokens, et un schéma garde le JSON honnête.

Prompt-to-JSON avec un schéma

Une fois que vous avez du texte propre, l'extraction est un appel unique : décrivez les champs que vous voulez, passez un schéma pour que la sortie soit structurée, et instruisez le modèle de retourner null plutôt que d'inventer lorsqu'un champ est absent. Une API d'extraction regroupe récupération, nettoyage et extraction en une seule requête pour que vous puissiez ignorer toute la plomberie :

curl -X POST "https://api.quantumproxies.io/extract" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "url": "https://example.com/product/xyz",
    "schema": {
      "title":  "string",
      "price":  "number",
      "in_stock": "boolean",
      "rating": "number|null"
    },
    "prompt": "Extract the product. Use null for anything not present."
  }'

Le schéma a une double fonction : il impose une forme prévisible pour le code en aval, et il contraint le modèle, qui est la première ligne de défense contre les champs hallucinés. Validez la réponse par rapport au même schéma et rejetez tout ce qui ne correspond pas — un prix inventé est pire qu'un prix manquant.

def validate(record, schema):
    for field, kind in schema.items():
        v = record.get(field)
        if v is None and "null" not in kind:
            raise ValueError(f"missing required field: {field}")
    return record  # only trust records that satisfy the schema

Quand l'extraction LLM surpasse les sélecteurs CSS — et quand ce n'est pas le cas

L'extraction avec IA n'est pas une amélioration universelle ; c'est un outil différent avec une courbe de coût différente. Utilisez-la lorsque le travail est varié ou instable — scraper mille sites avec mille mises en page, un site qui se redessine constamment, du contenu non structuré comme des avis ou des annonces où aucun sélecteur propre n'existe, ou un travail ponctuel où écrire des sélecteurs ne vaut pas le temps. Restez avec les sélecteurs CSS ou XPath lorsque vous ciblez un site stable à haut volume : les sélecteurs sont déterministes, pratiquement gratuits par page, et ne hallucinent jamais. Le schéma mature est hybride — des sélecteurs pour vos cibles principales à haut volume, l'extraction LLM pour la longue traîne et les sites qui changent constamment.

La discipline des coûts transforme cela d'une expérience en production. Au-delà du markdown en premier, mettez en cache de manière agressive pour ne jamais ré-extraire une page inchangée, adaptez la taille du modèle à la difficulté de la tâche — un petit modèle gère bien l'extraction de champs simples — et regroupez là où l'API le permet. Le rendu est sa propre ligne de coût ; ne rendez que les pages qui ont vraiment besoin de JavaScript, une décision que nous quantifions dans rendre uniquement lorsque c'est nécessaire. Obtenez une page blanche au lieu de contenu et la solution est généralement le rendu, couvert dans page vide, données manquantes.

Un mot sur la voie gratuite et open-source, car c'est ce que la plupart des gens recherchent en premier. Les bibliothèques d'extraction open-source sont excellentes pour apprendre le schéma et pour les petits travaux, mais elles vous renvoient les deux problèmes difficiles avec lesquels cet article a commencé : vous devez toujours récupérer les pages au-delà de la gestion des bots, et vous payez toujours pour le modèle qui fait l'extraction. 'Gratuit' signifie généralement code gratuit plus vos propres factures de proxy et de tokens. C'est un bon compromis pour un projet de loisir ou une preuve de concept ; à volume de production, la maintenance de la couche de récupération est exactement ce que les équipes finissent par externaliser, un choix construire-acheter que nous exposons dans pile de scraper DIY vs une API de scraping.

Comparaison de l'extraction LLM par rapport aux sélecteurs CSS, montrant l'approche flexible par token contre l'approche déterministe bon marché pour les sites stables à haut volume
L'extraction LLM gagne sur les sites variés et changeants ; les sélecteurs gagnent sur une cible stable à haut volume. La plupart des pipelines réels utilisent les deux.

Questions fréquemment posées

Claude peut-il scraper un site web ?

Pas tout seul. Un modèle de langage ne peut pas récupérer et rendre de manière fiable une page en direct — il raisonne sur le texte que vous fournissez. Pour utiliser l'IA pour le scraping, vous associez un moteur de scraping dédié, qui récupère et nettoie la page, avec le modèle, qui extrait les données structurées du résultat. Le moteur de scraping gère les proxies, le rendu et les blocages ; le modèle gère la transformation du contenu en JSON.

Comment réduire le coût du scraping web avec IA ?

Convertissez les pages en markdown ou extrayez le contenu principal avant d'envoyer quoi que ce soit à un modèle — le HTML brut peut représenter dix fois les tokens pour la même information. Ensuite, mettez en cache les pages inchangées, utilisez un modèle plus petit pour l'extraction de champs simples, ne rendez JavaScript que lorsqu'une page le nécessite, et regroupez les requêtes. Le volume de tokens est le coût dominant, donc réduire la taille de l'entrée est l'optimisation la plus efficace.

Le scraping web avec IA hallucine-t-il des données incorrectes ?

Cela peut arriver, surtout lorsqu'on lui fournit du HTML brut bruyant ou qu'on lui demande des champs qui ne sont pas sur la page. Protégez-vous contre cela en nettoyant l'entrée, en passant un schéma explicite, en instruisant le modèle de retourner null lorsqu'une valeur est absente, et en validant chaque réponse par rapport à ce schéma avant de lui faire confiance. Un champ manquant peut être réessayé ; un champ inventé de manière confiante corrompt silencieusement votre ensemble de données.

L'extraction LLM est-elle meilleure que les sélecteurs CSS ?

Cela dépend du travail. L'extraction LLM gagne lorsque les mises en page varient ou changent souvent et lorsque l'écriture de sélecteurs n'en vaut pas la peine, car elle n'a pas besoin de sélecteurs et survit aux refontes. Les sélecteurs CSS gagnent sur un site stable unique à haut volume : ils sont déterministes et bien moins chers par page. La plupart des pipelines de production utilisent des sélecteurs pour les cibles principales et l'extraction LLM pour la longue traîne.

Le scraping web avec IA est puissant une fois que vous arrêtez de traiter le modèle comme un scraper. Récupérez proprement avec des proxies, alimentez avec du markdown et non du HTML, contraignez la sortie avec un schéma, et réservez l'extraction LLM pour les travaux où sa flexibilité justifie son coût en tokens. C'est la différence entre une démonstration élégante et un pipeline que vous pouvez exécuter tous les jours.

Transformez n'importe quelle page en JSON avec l'API d'extraction