Dekodierungs HTML-Entitäten mit Python
-
05-07-2019 - |
Frage
Ich versuche HTML-Einträge zu dekodieren von hier
Lösung Versuchen Sie folgendes: import re
def _callback(matches):
id = matches.group(1)
try:
return unichr(int(id))
except:
return id
def decode_unicode_references(data):
return re.sub("&#(\d+)(;|(?=\s))", _callback, data)
data = "U.S. Adviser’s Blunt Memo on Iraq: Time ‘to Go Home’"
print decode_unicode_references(data)
Andere Tipps
Eigentlich, was Sie haben, sind keine HTML-Entitäten. Es gibt drei Sorten von denen & .....; thingies - zum Beispiel    
bedeuten alle U + 00A0 NO-BREAK SPACE
 
(der Typ Sie haben) ist eine „numerische Zeichenreferenz“ (dezimal).
 
ist eine „numerische Zeichenreferenz“ (hexadezimal).
ist eine Einheit.
Weiterführende Literatur: http://htmlhelp.com/reference/html40/entities/
Hier finden Sie Code für Python2.x finden, die alle drei in einer Abtastung durch den Eingang tut: http://effbot.org/zone/re-sub.htm#unescape-html
>>> from HTMLParser import HTMLParser
>>> print HTMLParser().unescape('U.S. Adviser’s Blunt Memo on Iraq: '
... 'Time ‘to Go Home’')
U.S. Adviser’s Blunt Memo on Iraq: Time ‘to Go Home’
Die Funktion wird in Python 2. Es ist in Python fixiert ist 3.4+ : es wird ausgesetzt, wie html.unescape()
es .
Dies funktioniert:
from BeautifulSoup import BeautifulStoneSoup
s = "U.S. Adviser’s Blunt Memo on Iraq: Time ‘to Go Home’"
decoded = BeautifulStoneSoup(s, convertEntities=BeautifulStoneSoup.HTML_ENTITIES)
Wenn Sie eine Zeichenfolge anstelle einem Unicode-Objekt mögen, müssen Sie es zu einer Codierung entschlüsseln, die die Zeichen verwendet werden unterstützt; ISO-8859-1 nicht:
result = decoded.encode("UTF-8")
Es ist bedauerlich, dass Sie ein externes Modul für so etwas brauchen; einfache HTML / XML-Entity-Decodierung in der Standardbibliothek sein sollte, und erfordert mich nicht über eine Bibliothek mit sinnlosen Klassennamen wie „BeautifulStoneSoup“ zu verwenden. (Klasse und Funktionsnamen sollten nicht „kreativ“ sein, sollten sie sinnvoll sein.)