Ich analysiere HTML mit Beautiful Soup 3, aber es enthält HTML-Entitäten, die Beautiful Soup 3 für mich nicht automatisch dekodiert:
>>> from BeautifulSoup import BeautifulSoup
>>> soup = BeautifulSoup("<p>£682m</p>")
>>> text = soup.find("p").string
>>> print text
£682m
Wie kann ich die HTML-Entitäten dekodieren text
, um "£682m"
statt zu erhalten "£682m"
.
Antworten:
Python 3.4+
Verwendung
html.unescape()
:FYI
html.parser.HTMLParser.unescape
ist veraltet und sollte in 3.5 entfernt werden , obwohl es versehentlich belassen wurde. Es wird bald aus der Sprache entfernt.Python 2.6-3.3
Sie können
HTMLParser.unescape()
aus der Standardbibliothek verwenden:HTMLParser
html.parser
Sie können auch die
six
Kompatibilitätsbibliothek verwenden, um den Import zu vereinfachen:quelle
unescape
Methode , sondern das gesamteHTMLParser
Modul zugunsten von abgelehnt wurdehtml.parser
.h.unescape(s).encode("utf-8")
. Die Dokumente: "" Die hier bereitgestellte Definition enthält alle durch XHTML 1.0 definierten Entitäten, die durch einfache Textsubstitution im Latin-1-Zeichensatz (ISO-8859-1) ""Beautiful Soup kümmert sich um die Konvertierung von Entitäten. In Beautiful Soup 3 müssen Sie das
convertEntities
Argument für denBeautifulSoup
Konstruktor angeben (siehe Abschnitt 'Entity Conversion' der archivierten Dokumente). In Beautiful Soup 4 werden Entitäten automatisch dekodiert.Schöne Suppe 3
Schöne Suppe 4
quelle
BeautifulSoup4
verwendetHTMLParser
, meistens. Siehe die QuelleSie können replace_entities aus der Bibliothek w3lib.html verwenden
quelle
Mit Beautiful Soup 4 können Sie einen Formatierer für Ihre Ausgabe festlegen
quelle
Ich hatte ein ähnliches Codierungsproblem. Ich habe die normalize () Methode verwendet. Beim Exportieren meines Datenrahmens in eine HTML-Datei in einem anderen Verzeichnis wurde ein Unicode-Fehler mit der Methode pandas .to_html () angezeigt. Am Ende habe ich das gemacht und es hat funktioniert ...
Das Datenrahmenobjekt kann beliebig sein, nennen wir es Tabelle ...
Codieren Sie Tabellendaten, damit wir sie in unsere HTML-Datei im Vorlagenordner exportieren können (dies kann ein beliebiger Speicherort sein :))
Exportieren Sie eine normalisierte Zeichenfolge in eine HTML-Datei
Referenz: Unicodedata-Dokumentation
quelle
Dies ist hier wahrscheinlich nicht relevant. Aber um diese HTML-Entites aus einem ganzen Dokument zu entfernen, können Sie Folgendes tun: (Nehmen Sie document = page an und verzeihen Sie bitte den schlampigen Code, aber wenn Sie Ideen haben, wie Sie ihn verbessern können, bin ich ganz Ohr - ich bin neu in Dies).
quelle
.unescape()
tut das für Sie . Ich verstehe nicht, warum Sie und Rob diese überkomplizierten Lösungen veröffentlicht haben, die ihre eigene Entitätsübereinstimmung rollen, wenn die akzeptierte Antwort bereits deutlich zeigt, dass.unescape()
Entitäten in der Zeichenfolge gefunden werden können.