7 Punkte von GN⁺ 2024-09-03 | 1 Kommentare | Auf WhatsApp teilen
  • Ein Beitrag, der die Erfahrungen bei der Entwicklung eines KI-gestützten Web-Scrapers mit der neuen Funktion für strukturierte Ausgaben von OpenAI zusammenfasst

GPT-4o bitten, Daten zu scrapen

  • Im ersten Experiment wurde GPT-4o gebeten, Daten aus einem HTML-String zu extrahieren
  • Mit einem Pydantic-Modell wurde die strukturierte Ausgabe eingerichtet
    from typing import List, Dict  
    class ParsedColumn(BaseModel):  
        name: str  
        values: List[str]  
    
    class ParsedTable(BaseModel):  
        name: str  
        columns: List[ParsedColumn]  
    
  • Der System-Prompt lautete wie folgt:

    Du bist ein Experte für Web-Scraping. Du erhältst den Inhalt einer HTML-Tabelle und sollst strukturierte Daten extrahieren.

Komplexe Tabellen parsen

  • Nach Versuchen mit einfachen Tabellen wurden komplexe Tabellen wie die 10-Tage-Wettervorhersage von Weather.com getestet
  • GPT-4o parste die Daten korrekt und ergänzte eine zusätzliche Spalte Day/Night
  • Da die Spalte Condition auf der Website nicht sichtbar war, wurde zunächst eine Halluzination vermutet, beim Prüfen des Quellcodes zeigte sich jedoch, dass das entsprechende Tag existierte

Zusammengeführte Zeilen bringen das Modell aus dem Tritt

  • Eine einfache Tabelle aus Wikipedia (Human Development Index) wurde getestet, doch wegen zusammengeführter Zeilen scheiterte das Modell
  • Auch eine Anpassung des System-Prompts brachte keine Wirkung

GPT-4o bitten, XPath zurückzugeben

  • Um die Kosten für OpenAI-API-Aufrufe zu senken, wurde darum gebeten, statt geparster Daten XPath zurückzugeben
  • Allerdings lieferte das Modell häufig falsche XPath-Ausdrücke oder überhaupt keine Daten

Beide Ansätze kombinieren

  • Es wurde ein Ansatz ausprobiert, bei dem zuerst Daten extrahiert und anschließend unter Bezug darauf XPath angefordert wird
  • Diese Methode lieferte bessere Ergebnisse, verursachte jedoch das Problem, dass Bilder in Text umgewandelt wurden

GPT-4o ist sehr teuer

  • Scraping mit GPT-4o ist kostspielig
  • Durch zusätzliche Bereinigungslogik, die unnötige Daten aus HTML-Strings entfernt, wurden die Kosten gesenkt

Fazit und Demo

  • Die Qualität der Datenextraktion durch GPT-4o war beeindruckend, die Kostenfrage jedoch enttäuschend
  • Es wird eine einfache Demo mit Streamlit bereitgestellt
  • Mit weiteren Experimenten gibt es noch viel Verbesserungspotenzial

Zusammenfassung von GN⁺

  • Dieser Beitrag untersucht die Möglichkeiten und Grenzen von Web-Scraping mit KI
  • Er zeigt, dass sich mit der Funktion für strukturierte Ausgaben von GPT-4o auch komplexe Tabellendaten präzise extrahieren lassen
  • Trotz Kostenproblemen und einiger technischer Einschränkungen wird das Potenzial KI-gestützter Web-Scraping-Tools deutlich
  • Andere Projekte mit ähnlicher Funktionalität sind unter anderem BeautifulSoup und Scrapy

1 Kommentare

 
GN⁺ 2024-09-03
Hacker-News-Kommentare
  • Es war erfolgreich, HTML in ein einfaches Format (z. B. Markdown) umzuwandeln und es dann an ein LLM zu übergeben

    • Extractus und dom-to-semantic-markdown wurden ausprobiert
    • Intern werden Apify und Firecrawl verwendet, um Magic Loops in der Cloud auszuführen
    • In der Chrome Extension wird dom-to-semantic-markdown verwendet
    • Es wird untersucht, wie sich bestimmte Elemente über den User-Support-Flow extrahieren lassen
    • Durch Vereinfachung des Problems wurde auch mit GPT-4o mini Erfolg erzielt
  • Für strukturierte Inhalte (z. B. Listen von Einträgen, einfache Tabellen) ist kein LLM nötig

    • Eine erste Version des Web-Scrapers wurde mit AI gebaut, aber Heuristiken auf Basis von Elementattributen und Position waren schneller, günstiger und genauer
    • Auf den meisten Websites funktioniert ein Nicht-AI-Ansatz sehr gut
    • Man sollte prüfen, ob AI wirklich nötig ist
  • Es ist überraschend, dass der Autor 99 % der Arbeit erledigt und für das verbleibende 1 % nicht ollama heruntergeladen und getestet hat

    • Ein 7B- oder 30B-Modell könnte in diesem Fall gut funktionieren
    • GPT-4o ist nicht nötig
  • Es wird die Methode verwendet, einen Screenshot der Seite zu machen, den benötigten Teil auszuschneiden und an GPT zu übergeben

    • Nützlich, wenn man für den Preisvergleich verschiedener Anbieter manuell arbeiten muss
    • Kann teuer werden, ist aber günstiger als eine echte Person und ermöglicht sinnvollere Arbeit
  • OpenAI hat kürzlich die Batch API angekündigt

    • Alle Prompts können vorbereitet und dann als Batch ausgeführt werden
    • Die Kosten halbieren sich
    • Nützlich für nicht in Echtzeit arbeitende Anwendungen
  • Es war effektiv, ein HTML-Beispiel bereitzustellen und nach einem beautifulsoup-Code-Snippet zu fragen

    • Die zu scrapende Struktur bleibt gleich
    • Ein LLM für das eigentliche Parsing zu verwenden, ist übertrieben und birgt das Risiko verfälschter Ergebnisse
  • Es wird gefragt, ob es einen "html reducer" gibt

    • 90 % der Tokens im Seitenquelltext sind unnötig
    • Wenn man mit einem DOM-Parser nur Knoten mit Text beibehält, sollte das erhebliche Einsparungen bringen
    • readability wird verwendet, aber bei Websites mit viel JS sinkt die Qualität
  • Anstatt direkt mit GPT-4o zu scrapen, kann man GPT-4o ein einfaches Web-Scraper-Skript schreiben lassen

    • Wenn Probleme auftreten, wird eine Prompt-Schleife verwendet
    • Es ist effizienter, einen Constraint-Solver zu erstellen und auszuführen
  • Bei Kadoa wird an AI-automatisierten Web-Scraping-Workflows gearbeitet

    • Anfangs wurde GPT-3 verwendet, danach wurde eine kosteneffiziente Lösung entwickelt
    • Es wird Codegen verwendet, um CSS-Selektoren oder XPath-Extraktionscode zu erzeugen
    • Ein kleines LLM wird genutzt, um Daten zu bereinigen und ins gewünschte Format zu mappen
    • Ein LLM wird als Judge verwendet, um die Datenqualität zu bewerten
    • Klassische ETL-Engineering-Methoden werden mit kleinen LLM-Schritten kombiniert
  • Es wird eine Datenbank für klassische Musik aufgebaut

    • Mit ChatGPT werden Event-Listen aus Wikipedia extrahiert
    • Zur Kostensenkung wird chatgpt-mini verwendet
    • BeautifulSoup(html).text wird genutzt, um die Token-Anzahl zu reduzieren
    • Beim Scrapen von 10.000 Seiten war es effizienter, HTML bereitzustellen und Python-Code schreiben zu lassen
    • Die from_html-Funktion von Pandas ist nützlich, aber nicht alle Tabellen verwenden das <table>-Tag