HTML Entity Codes in Text [Duplikat]
-
20-08-2019 - |
Frage
Diese Frage bereits eine Antwort hier:
- Decode HTML-Entitäten in Python-String? 5 Antworten
Kennt jemand eine einfache Möglichkeit, in Python einen String mit HTML-Entity-Codes zu konvertieren (z <
&
) zu einer normalen Zeichenfolge (z <&)?
cgi.escape()
entweichen Strings (schlecht), aber es gibt keine unescape()
.
Lösung
HTMLParser hat die Funktionalität in der Standardbibliothek. Es ist leider nicht dokumentiert:
(Python2 Docs )
>>> import HTMLParser
>>> h= HTMLParser.HTMLParser()
>>> h.unescape('alpha < β')
u'alpha < \u03b2'
(Python 3 Docs )
>>> import html.parser
>>> h = html.parser.HTMLParser()
>>> h.unescape('alpha < β')
'alpha < \u03b2'
htmlentitydefs ist dokumentiert, aber erfordert, dass Sie viel zu tun die Arbeit selbst.
Wenn Sie nur die XML vordefinierte Einheiten benötigen (lt, gt, amp, quot, apos), könnten Sie minidom, um sie zu analysieren. Wenn Sie nur die vordefinierten Entitäten und keine numerischen Zeichenreferenzen müssen, könnten Sie sogar verwenden, nur eine einfache alte Zeichenfolge für die Geschwindigkeit ersetzen.
Andere Tipps
Ich habe vergessen, es auf den ersten Tag hinzu, aber ich bin mit BeautifulSoup.
Graben um in der Dokumentation, fand ich:
soup = BeautifulSoup(html, convertEntities=BeautifulSoup.HTML_ENTITIES)
tut es genau so, wie ich hatte gehofft.
Es gibt nichts in den stdlib zu unescape HTML Python gebaut, aber es gibt ein kurzes Skript Sie an Ihre Bedürfnisse an http://www.w3.org/QA/2008/04/unescape-html-entities-python .html.
Verwenden Sie htmlentitydefs Modul. Das ist mein alter Code, es funktionierte, aber ich bin sicher, es ist sauberer und pythonic Weg, es zu tun:
e2c = dict(('&%s;'%k,eval("u'\\u%04x'"%v)) for k, v in htmlentitydefs.name2codepoint.items())