7 points par GN⁺ 2024-09-03 | 1 commentaires | Partager sur WhatsApp
  • Un article qui résume l'expérience de développement d'un scraper web assisté par IA à l'aide de la nouvelle fonctionnalité de sortie structurée d'OpenAI

Demander à GPT-4o de scraper des données

  • La première expérimentation a consisté à demander à GPT-4o d'extraire des données à partir d'une chaîne HTML
  • Une sortie structurée a été définie à l'aide d'un modèle Pydantic
    from typing import List, Dict  
    class ParsedColumn(BaseModel):  
        name: str  
        values: List[str]  
    
    class ParsedTable(BaseModel):  
        name: str  
        columns: List[ParsedColumn]  
    
  • Le prompt système était le suivant :

    Vous êtes un expert en web scraping. Vous devez recevoir le contenu d'un tableau HTML et en extraire des données structurées

Parser des tableaux complexes

  • Après avoir testé des tableaux simples, l'auteur a essayé des tableaux plus complexes, comme les prévisions météo sur 10 jours de Weather.com
  • GPT-4o a ajouté une colonne Day/Night et a correctement parsé les données
  • La colonne Condition n'était pas visible sur le site web, ce qui a d'abord fait penser à une hallucination, mais l'inspection du code source a montré qu'il s'agissait bien d'une balise existante

Les lignes fusionnées font échouer le modèle

  • Un tableau simple de Wikipédia (Human Development Index) a été testé, mais le modèle a échoué à cause des lignes fusionnées
  • Modifier le prompt système n'a eu aucun effet

Demander à GPT-4o de renvoyer du XPath

  • Pour réduire le coût des appels à l'API OpenAI, l'auteur a demandé au modèle de renvoyer du XPath plutôt que les données parsées
  • Cependant, le modèle renvoyait souvent des XPath incorrects ou ne renvoyait pas les données

Combiner les deux approches

  • Une approche consistant à extraire d'abord les données puis à demander du XPath en s'y référant a été testée
  • Cette méthode a donné de meilleurs résultats, mais un problème est apparu : les images étaient converties en texte

GPT-4o est très coûteux

  • Le scraping avec GPT-4o revient cher
  • Une logique de nettoyage a été ajoutée pour supprimer les données inutiles des chaînes HTML afin de réduire les coûts

Conclusion et démo

  • L'auteur a été impressionné par la qualité d'extraction de données de GPT-4o, mais déçu par la question du coût
  • Une démo simple réalisée avec Streamlit est proposée
  • Il reste encore beaucoup de points à améliorer via davantage d'expérimentations

Le résumé de GN⁺

  • Cet article explore les possibilités et les limites du web scraping avec l'IA
  • Il montre qu'il est possible d'extraire avec précision des données de tableaux complexes en exploitant la fonctionnalité de sortie structurée de GPT-4o
  • Malgré les problèmes de coût et certaines limites techniques, il met en évidence le potentiel des outils de web scraping assistés par IA
  • Parmi les autres projets offrant des fonctionnalités similaires, on peut citer BeautifulSoup et Scrapy

1 commentaires

 
GN⁺ 2024-09-03
Avis Hacker News
  • Faire passer le HTML dans un format simple (par ex. Markdown) avant de l’envoyer à un LLM s’est révélé efficace

    • Essais avec Extractus et dom-to-semantic-markdown
    • Utilisation d’Apify et Firecrawl en interne pour exécuter Magic Loops dans le cloud
    • Utilisation de dom-to-semantic-markdown dans une extension Chrome
    • Exploration d’une méthode d’extraction d’éléments spécifiques via le flux de support utilisateur
    • En simplifiant le problème, de bons résultats ont aussi été obtenus avec GPT-4o mini
  • Pour le contenu structuré (par ex. listes d’éléments, tableaux simples), un LLM n’est pas nécessaire

    • Une première version du scraper web a été réalisée avec de l’IA, mais des heuristiques fondées sur les attributs et la position des éléments se sont révélées plus rapides, moins coûteuses et plus précises
    • Sur la plupart des sites web, une approche non IA fonctionne très bien
    • Il faut vérifier si l’IA est vraiment nécessaire
  • Étonnement de voir que l’auteur a réalisé 99 % du travail sans télécharger ni tester ollama pour le 1 % restant

    • Un modèle 7B ou 30B pourrait bien fonctionner dans ce cas
    • GPT-4o n’est pas nécessaire
  • Utilisation d’une méthode consistant à prendre une capture d’écran de la page, à découper la partie nécessaire, puis à l’envoyer à GPT

    • Utile lorsqu’il faut faire manuellement des comparaisons de prix entre différents fournisseurs
    • Cela peut coûter cher, mais reste moins onéreux qu’une personne réelle et permet de se concentrer sur des tâches plus utiles
  • OpenAI a récemment annoncé la Batch API

    • Il est possible de préparer tous les prompts puis de les exécuter en lot
    • Le coût est réduit de moitié
    • Utile pour les applications non temps réel
  • Fournir un exemple HTML et demander un extrait de code BeautifulSoup s’est révélé efficace

    • La structure à scraper reste identique
    • Utiliser un LLM pour le parsing lui-même est excessif et risque de produire des résultats déformés
  • Question sur l’existence d’un « html reducer »

    • 90 % des tokens du code source de la page sont inutiles
    • Conserver uniquement les nœuds contenant du texte via un parseur DOM permettrait probablement des économies importantes
    • readability est utilisé, mais la qualité baisse sur les sites très chargés en JS
  • Au lieu de faire le scraping directement avec GPT-4o, GPT-4o peut écrire un simple script de scraping web

    • En cas de problème, une boucle de prompt est utilisée
    • Il est plus efficace de créer et d’exécuter un solveur de contraintes
  • Chez Kadoa, un travail est en cours sur l’automatisation du scraping web par IA

    • Au départ, GPT-3 était utilisé, puis une solution plus rentable a été développée
    • Utilisation d’un codegen qui génère du code d’extraction en sélecteurs CSS ou XPath
    • Utilisation de petits LLM pour nettoyer les données et les mapper au format souhaité
    • Utilisation d’un LLM comme juge pour évaluer la qualité des données
    • Combinaison de méthodes d’ingénierie ETL traditionnelles avec de petites étapes LLM
  • Construction en cours d’une base de données de musique classique

    • Utilisation de ChatGPT pour extraire des listes d’événements depuis Wikipédia
    • Utilisation de chatgpt-mini pour réduire les coûts
    • Utilisation de BeautifulSoup(html).text pour réduire le nombre de tokens
    • Lors du scraping de 10 000 pages, fournir le HTML et faire écrire du code Python s’est révélé plus efficace
    • La fonction from_html de Pandas est utile, mais tous les tableaux n’utilisent pas la balise <table>