Seite 1 von 1

BeautifulSoup und selfclosing Tags

Verfasst: Mittwoch 22. Dezember 2010, 23:08
von Humbalan
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

Re: BeautifulSoup und selfclosing Tags

Verfasst: Donnerstag 23. Dezember 2010, 10:24
von sma
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

Re: BeautifulSoup und selfclosing Tags

Verfasst: Donnerstag 23. Dezember 2010, 10:40
von 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.

Re: BeautifulSoup und selfclosing Tags

Verfasst: Donnerstag 23. Dezember 2010, 10:46
von Humbalan
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