Aller au contenu principal

Extraire des données de pages web

Le scraping par la vision

L’extraction de données est l’un des usages les plus puissants de Computer Use. Au lieu de parser du HTML ou de manipuler le DOM, votre agent lit l’écran comme un humain et structure les informations extraites.

Extraction simple : lire et rapporter

Le cas le plus basique : demander à l’agent de lire du contenu visible et de le retourner dans un format structuré.

task = """
Va sur https://news.example.com et extrais les 5 premiers titres 
d'articles visibles sur la page d'accueil.

Retourne le résultat au format JSON :
[
  {"rank": 1, "title": "..."},
  {"rank": 2, "title": "..."},
  ...
]
"""

Le modèle voit le screenshot, identifie les titres, et retourne le JSON dans sa réponse textuelle (quand stop_reason == "end_turn").

Extraction avec scrolling

La plupart des pages nécessitent de scroller pour voir tout le contenu. Structurez votre tâche en conséquence :

task = """
Sur cette page de résultats de recherche :
1. Lis tous les résultats visibles et note-les
2. Scrolle vers le bas pour voir plus de résultats
3. Continue jusqu'à avoir collecté 20 résultats ou atteint 
   le bas de la page

Pour chaque résultat, extrais :
- Titre
- URL
- Description courte

Retourne le tout en JSON.
"""

Extraction de tableaux

Les tableaux sont particulièrement adaptés à Computer Use car le modèle excelle à comprendre les structures tabulaires visuelles :

task = """
Ouvre https://stats.example.com/prices et extrais le tableau 
des prix affiché sur la page.

Le tableau a les colonnes : Produit, Prix HT, TVA, Prix TTC.
Extrais toutes les lignes et retourne en JSON :
{
  "headers": ["Produit", "Prix HT", "TVA", "Prix TTC"],
  "rows": [
    ["Widget A", "10.00", "20%", "12.00"],
    ...
  ]
}
"""

Combiner vision et DOM

Pour une extraction plus robuste, combinez Computer Use (pour naviguer et identifier les zones d’intérêt) avec l’extraction DOM de Playwright (pour récupérer les données exactes) :

def extract_with_dom(page, task_description: str):
    """Utilise Computer Use pour naviguer, Playwright pour extraire."""
    # Phase 1 : Computer Use navigue et identifie la zone
    run_agent(task_description, page=page)
    
    # Phase 2 : Playwright extrait les données précises
    data = page.evaluate("""
        () => {
            const rows = document.querySelectorAll(table tbody tr);
            return Array.from(rows).map(row => {
                const cells = row.querySelectorAll(td);
                return Array.from(cells).map(c => c.textContent.trim());
            });
        }
    """)
    
    return data

Cette approche hybride est plus fiable : l’IA navigue visuellement vers la bonne page, puis Playwright extrait les données avec précision.

Extraction de données structurées complexes

Pour les pages avec des structures non-standard (cartes produits, profils, annonces), utilisez un prompt détaillé :

task = """
Sur cette page de résultats immobiliers, extrais pour chaque annonce :
- prix (nombre, en euros)
- surface (en m²)
- nombre_pieces (entier)
- ville
- code_postal
- url_annonce

Scrolle pour charger plus d'annonces si nécessaire.
Arrête-toi quand tu as 10 annonces ou quand il n'y en a plus.

Format de sortie JSON strict :
{
  "annonces": [
    {
      "prix": 250000,
      "surface": 65,
      "nombre_pieces": 3,
      "ville": "Paris",
      "code_postal": "75011",
      "url_annonce": "https://..."
    }
  ]
}
"""

Sauvegarder les données extraites

Structurez votre pipeline d’extraction :

import json
from datetime import datetime

def save_extraction(data: dict, source_url: str):
    """Sauvegarde les données extraites avec métadonnées."""
    output = {
        "source": source_url,
        "extracted_at": datetime.utcnow().isoformat(),
        "data": data,
    }
    
    filename = f"extraction_{datetime.now():%Y%m%d_%H%M%S}.json"
    with open(filename, "w", encoding="utf-8") as f:
        json.dump(output, f, ensure_ascii=False, indent=2)
    
    print(f"Données sauvegardées dans {filename}")

Limites de l’extraction par vision

  • Précision des chiffres : L’OCR implicite du modèle peut confondre des caractères similaires (0/O, 1/l). Vérifiez les données critiques.
  • Coût : Chaque screenshot consomme ~1500 tokens. Une extraction de 50 éléments avec scrolling peut coûter 50K+ tokens.
  • Vitesse : Comptez 30 secondes à 2 minutes pour extraire une page complète.

Points clés à retenir

  • Computer Use excelle à extraire des données de pages visuellement complexes
  • Demandez toujours un format de sortie structuré (JSON) dans le prompt
  • Combinez la navigation IA avec l’extraction DOM Playwright pour plus de fiabilité
  • Prévoyez le scrolling pour les pages longues
  • Vérifiez les données numériques critiques car l’OCR implicite n’est pas parfait