2013-02-28 9 views
9

ersetzen oder entfernen Ich verarbeite HTML mit Python und die BeautifulSoup 4-Bibliothek, und ich kann keinen offensichtlichen Weg finden,   durch ein Leerzeichen zu ersetzen. Stattdessen scheint es in ein nicht-brechendes Unicode-Leerzeichen konvertiert zu werden.Wie kann ich HTML-Entitäten wie " " mit BeautifulSoup 4

Fehle ich etwas offensichtlich? Was ist der beste Weg, um & nbsp zu ersetzen? mit einem normalen Raum mit BeautifulSoup?

Bearbeiten, um hinzuzufügen, dass ich die neueste Version BeautifulSoup 4 verwende, so dass die Option convertEntities=BeautifulSoup.HTML_ENTITIES in Beautiful Soup 3 nicht verfügbar ist.

+2

Aber es * ist * ein nicht-brechender Raum ... –

+0

Ja ich realisiere   ist ein nicht brechender Raum. Sie sagen also, das Richtige ist, das gewünschte HTML-Snippet zu erhalten und dann eine Unicode-Suche zu starten und zu ersetzen? Ich denke, das macht, was ich will, ich dachte nur, es gäbe ein Äquivalent zur alten Option convertEntities. –

Antwort

8

Siehe Entities in der Dokumentation. BeautifulSoup 4 erzeugt den richtigen Unicode für alle Entitäten:

Eine eingehende HTML- oder XML-Entität wird immer in das entsprechende Unicode-Zeichen konvertiert.

Ja,   wird in ein nicht brechendes Leerzeichen umgewandelt. Wenn Sie wirklich möchten, dass diese Leerzeichen sind, müssen Sie einen Unicode ersetzen.

15
>>> soup = BeautifulSoup('<div>a&nbsp;b</div>') 
>>> soup.prettify(formatter=lambda s: s.replace(u'\xa0', ' ')) 
u'<html>\n <body>\n <div>\n a b\n </div>\n </body>\n</html>' 
+0

Dies ist ein eleganter Ansatz, um die Suche und den Ersatz mit einem formatter zu tun. Wenn ich jedoch @Martijn Pieters Antwort nicht gesehen hätte, wäre es ein bisschen mysteriös, also werde ich seine Antwort als die akzeptierte Antwort markieren, da sie mehr Erklärungen hat. –

2

Ich würde einfach ersetzen die nicht brechenden Raum mit dem Unicode.

nonBreakSpace = u'\xa0' 
soup = soup.replace(nonBreakSpace, '') 

Ein Vorteil ist, dass Sie, obwohl Sie BeautifulSoup verwenden, nicht müssen.

Verwandte Themen