From 934cc739d294655213003e1cb7b00e15f473241a Mon Sep 17 00:00:00 2001 From: Oliver Date: Thu, 18 Jun 2026 09:05:44 +0200 Subject: [PATCH] fix: figure-umschlossene Tabellen/Block-Inhalte gehen nicht mehr verloren MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Der figure-Handler behandelte
ausschließlich als Bild-Figur: Fand er ein , rendete er nur dieses und brach mit return ab; fand er keins, verwarf er den Inhalt komplett. WordPress (und andere) verpacken jedoch auch Tabellen (figure.wp-block-table), Code (wp-block-code) und Listen in
. Auf der Regel-Referenzseite (docs.greyhound-software.com/regelsystem/ referenz-regeln) steckt die gesamte Regeltabelle in genau einer figure.wp-block-table mit Icon- je Zeile. Der Handler rendete nur das erste Icon und verwarf die komplette Tabelle → kein einziger Regelname in der Ausgabe. Fix: figure nur dann als Bild-Block rendern, wenn sie ein enthält UND keinen Block-Inhalt (table/pre/blockquote/ul/ol/iframe). Andernfalls als Container rekursiv verarbeiten – dann greift u. a. der bestehende Tabellen-Handler. Verifiziert gegen die echte Seite: alle 41 Regeln werden jetzt extrahiert (Ausgabe ~1238 → ~7043 Zeichen, 42 Überschriften). Regressionsfälle für echte Bild-Figur (Bild-Block + Caption) sowie Tabellen-Figur ohne/mit img bestehen. Co-Authored-By: Claude Opus 4.8 --- website_scraper.py | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/website_scraper.py b/website_scraper.py index 071d0fe..622acea 100644 --- a/website_scraper.py +++ b/website_scraper.py @@ -1118,10 +1118,19 @@ def _node(self, el, out: list): return if tag == "figure": + #
umschließt nicht nur Bilder: WordPress & Co. verpacken + # auch Tabellen (figure.wp-block-table), Code (wp-block-code), Listen + # usw. in
. Nur eine echte Bild-Figur als Bild-Block rendern; + # enthält die Figur Block-Inhalt (z. B. eine Tabelle), als Container + # rekursiv verarbeiten – sonst ginge der gesamte Inhalt verloren. + block_child = el.find(["table", "pre", "blockquote", "ul", "ol", "iframe"]) img = el.find("img") cap = el.find("figcaption") - if img: + if img is not None and block_child is None: self._img_block(img, out, caption=self._inline(cap).strip() if cap else "") + else: + for ch in el.children: + self._node(ch, out) return if tag == "table":