BeautifulSoup und selfclosing Tags

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Benutzeravatar
Humbalan
User
Beiträge: 59
Registriert: Mittwoch 2. September 2009, 15:11

Guten Abend,

hier ein Winz-Beispielprogramm mit einem Verhalten, dass ich gern geändert hätte:

Code: Alles auswählen

>>> from BeautifulSoup import BeautifulSoup
>>> BeautifulSoup ( "<meta id='Blah'>" )
<meta id="Blah" />
>>>
Ich möchte BeautifulSoup abgewöhnen, hier einen Selfclosing-Tag einzubauen, da sonst die Validierung meiner Sourcen nicht geht.
Versucht habe ich schon

Code: Alles auswählen

BeautifulSoup.SELF_CLOSING_TAGS["meta"]=None
hat aber nichts genützt (habe dann bemerkt, dass im SELF_CLOSING_TAGS Dictionary meta:None schon enthalten war).

Kann jemand helfen?

Danke, Humbalan
sma
User
Beiträge: 3018
Registriert: Montag 19. November 2007, 19:57
Wohnort: Kiel

Da die Aufgabe von BeautifulSoup ist, aus mehr oder weniger kaputtem HTML ein wohlgeformtes XML-Dokument zu machen und wohlgeformte XML-Dokumente nun mal selbstschließende Tags enthält, hast du glaube ich mit der Bibliothek wenig Chancen, die Ausgabe wieder als HTML (aber nicht XHTML) darzustellen.

Wenn du `Tag.__str__` (so ca. Zeile 693) änderst, kannst du auf das " /" vor ">" verzichten.

Stefan
lunar

Falls Du binäre Drittmodule nutzen kannst, so kannst Du "lxml.html" verwenden. Dieses Modul verzichtet bei "lxml.html.tostring()" auf selbst schließende Tags, und gibt statt XML HTML aus.
Benutzeravatar
Humbalan
User
Beiträge: 59
Registriert: Mittwoch 2. September 2009, 15:11

vielen Dank für Eure schnellen Antworten.

@Stefan,
Tag.__str__() habe ich geändert und das, was dabei rauskommt ist genau richtig. Alle meine HTMLs kommen jetzt wieder über den Validierer.

@sma
Mittelfristig werde ich mein Programm auf lxml umeseln, da ich mich nicht darauf verlassen möchte, dass eine geänderte Library (s. o.) mir nicht eines Tages auf die Füße fällt.

Grüße und schöne Feiertage
Humbalan
Antworten