Scraper BY: Bayern (Eigensystem, Wahl 2028-10-08) #23
Labels
No Milestone
No project
No Assignees
1 Participants
Notifications
Due Date
No due date set.
Dependencies
No dependencies set.
Reference: tobias/gwoe-antragspruefer#23
Loading…
Reference in New Issue
Block a user
No description provided.
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Wahltermin
2028-10-08 — Bayern (BY), aktuell 19. Wahlperiode.
Backend
Eigensystemby19/1234Adapter-Strategie
Eigensystem —
BayernAdapterist als TODO-Stub bereits inparlamente.pyZ. ~814 angelegt. Reverse-Engineering der Bayern-Doku-Suche nötig. Kein Wiederverwendungspotential mit anderen Adaptern.Was zu tun ist
webapp/app/parlamente.pyimplementieren — entweder als neue Subklasse vonParlamentAdapteroder als zweiter Registry-Eintrag eines existierenden parametrisierbaren Adapters.ADAPTERS-Registry am Ende der Datei.ADAPTERS["BY"].search("Schule", limit=10)liefert echte Anträge mit Datum + Fraktionen, sortiert newest-first.Hängt mit … zusammenunten) — dieses Issue ist nur der Adapter selbst, nicht das Indexieren der Wahlprogramme oder das Frontend-aktiv-Setzen.Akzeptanzkriterien
parlamente.py::ADAPTERS["BY"]existiert und ist instanziierbarsearch(query="Schule", limit=10)liefert ≥3 echte Drucksachen mit korrektem Datum, Fraktionen, PDF-Linkget_document(drucksache)für eine reale Drucksache der laufenden WP liefert das Dokument zurückdownload_text(drucksache)extrahiert Text aus dem PDFHinweise aus dokukratie/by.yml
HTML-Scraping mit Query-String, kein JSON-API:
https://www.bayern.landtag.de/parlament/dokumente/drucksachen/suchvorgangsart[]— Vorgangsartwahlperiodeid[]— WP-IDerfassungsdatum[start]/erfassungsdatum[end]dokumentenart=Drucksacheanzahl_treffer=100.//div[@class='row result']//a[text()[contains(., 'Beratungsverlauf')]].//table[@id='basisdokument']//a[@class='vorgangDownloadlink'][1].//table[@id='basisdokument']//span[@class='drucksache'].//table[@id='basisdokument']//span[@class='betreff'].//table[@id='dokumente']//tbody[@id='dokumente:tb']/tr/td[2]/text().//ul[@class='pagination']/li[@class='next']Synergie: Komplett eigenständig.
BayernAdapterals TODO-Stub existiert inparlamente.pyZ. ~814.Resolved (2026-04-10) — Adapter live
Implementation in
27ae82a. Stub durch echten BayernAdapter ersetzt.Backend
TYPO3-Site mit ext-solr-Suche unter
/parlament/dokumente/drucksachen. Server-side rendered HTML, keine SPA, keine Auth, keine Cookies. Filter direkt als URL-Query-Parameter — der freundlichste Backend der bisher implementierten Eigensystems.Suche
GET /parlament/dokumente/drucksachen?dokumentenart=Drucksache&wahlperiodeid[]=19&q=<volltext>&sort=date&anzahl_treffer=100&page=<n>17.598 Drucksachen in WP19 (Stand 2026-04-10), davon ~10-15% Anträge. Pro Page 100 Hits, max 3 Pages → ~30-50 Anträge nach client-seitigem Filter auf
<p>Antrag …</p>(analog HE/SL).Result-Pattern
Drei Regexen:
_RE_RESULT_BLOCK,_RE_DRUCKSACHE_HEADER,_RE_TYP_FRAKTION,_RE_TITLE. Stabil und ohne BeautifulSoup-Overhead.Drucksachen-Lookup
get_document(drucksache)nutztq=<drucksache>— die Solr-Suche matcht die Nummer im Volltext und liefert sie als einzigen oder ersten Hit. Kein dedizierter GetById-Endpoint nötig (gleiches Pattern wie SL und HB).Free-Voters-Disambiguation
<p>Antrag CSU, FREIE WÄHLER</p>wird durch den #55 Parteinamen-Mapper korrekt zu["FW-BAYERN", "CSU"]aufgelöst — separat von "FREIE WÄHLER" in RP und "BVB-FW" in Brandenburg.Akzeptanzkriterien
parlamente.py::ADAPTERS["BY"]existiert und ist instanziierbarsearch("Schule", limit=5)liefert 5 echte Drucksachen mit Datum, Fraktionen, PDF-Link:get_document("19/11388")matcht via Volltext-Suchedownload_text("19/11388")→ 4694 Zeichen echter Antrags-Volltextsort=date)Tests + Deploy
27ae82a)Closing.