JustHTML – Vollständiger Python‑Parser mit 100 % html5lib‑Testabdeckung
Key Takeaway
Durch den systematischen Einsatz von Coding‑Agents konnte ich einen Python‑basierten HTML5‑Parser entwickeln, der sämtliche Tests von html5lib bestanden hat – obwohl er anfangs weniger als 1 % der Fälle korrekt handhabte – und lernte gleichzeitig, wie man komplexe Parsing‑Algorithmen wie das Adoption‑Agency‑Verfahren eigenständig debuggt.
Summary
- Projekt‑Überblick: Release von JustHTML, einer Python‑Parserbibliothek ohne externe Abhängigkeiten, die das komplette html5lib‑Test‑Suite (100 %) passiert und CSS‑Selector‑Abfragen unterstützt.
- Motivation: Nutzung der großen Test‑Suite von html5lib, um von Coding‑Agents ein selbstlernendes System zu bauen.
- Erstschritt – One‑Shot‑Parser: Ausgangspunkt, aber nur grob funktionsfähig.
- Integration von Tests: Verbindung mit html5lib‑tests, erste Pass‑Rate < 1 %.
- Iterativer Aufbau: Ausbau auf ca. 30 % Pass‑Rate durch Refactorings und Bugfixes.
- Modularisierung in Tag‑Handler‑Klassen.
- Erreichen von 100 % bei moderneren AIs wie Claude Sonnet 3.7.
- Benchmarking: Erkenntnis, dass JustHTML ca. 3 × langsamer als html5lib ist.
- Performance‑Optimierungen: Rewrite‑Tokenisierung in Rust (nur knapp schneller).
- Entdeckung von html5ever (Rust‑basiert, schnell). Pivot zum Portieren von html5ever‑Logik nach Python.
- Code‑Reduktion: Mithilfe von Coverage‑Analyse (100 %) entfernte man ungenutzte Teile – Ergebnis: Verkürzung der Tree‑Builder‑Codezeile von 786 auf 453, Geschwindigkeitsgewinn.
- Fuzzing: Erzeugte 3 Mio. gefuzzte Webseiten, behebt jedes gefundene Problem und schreibt Test‑Add‑Ons.
- Vergleich mit anderen Parsers: Keine andere Bibliothek erreicht 90 % Coverage; lxml 1 % und html5lib 88 %.
- Bereitstellung als Library: CI, Releases via GitHub, README, Query‑API, Selector‑API (Beispiel‑Code).
- Namensänderung: TurboHTML → JustHTML, Fokus auf Vollständigkeit statt Geschwindigkeit.
- Agent vs. Entwickler: Der Autor war der Hauptinteraktor – er korrigierte Fehler, bot Feedback, während der Agent den eigentlichen Code schrieb.
Related queries:
- Was sind die Aufgaben des Adoption Agency Algorithmus in HTML‑Parsing?
- Wie hat Claude Sonnet 3.7 die Entwicklung von JustHTML unterstützt?
- Warum bleibt JustHTML trotz 100 % Tests langsamer als html5lib?
Quelle: friendlybit.com/python/writing-justhtml-with-coding-agents/
