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 &lt; &amp;) zu einer normalen Zeichenfolge (z <&)?

cgi.escape() entweichen Strings (schlecht), aber es gibt keine unescape().

War es hilfreich?

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 &lt; &beta;')
u'alpha < \u03b2'

(Python 3 Docs )

>>> import html.parser
>>> h = html.parser.HTMLParser()
>>> h.unescape('alpha &lt; &beta;')
'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())
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top