Décoder les entités HTML en Python chaîne?
Je suis d'analyse du code HTML avec une Belle Soupe 3, mais il contient des entités HTML, ce qui est Beau Soupe 3 n'est pas automatiquement le décodage pour moi:
>>> from BeautifulSoup import BeautifulSoup
>>> soup = BeautifulSoup("<p>£682m</p>")
>>> text = soup.find("p").string
>>> print text
£682m
Comment décoder les entités HTML dans text
pour obtenir "£682m"
au lieu de "£682m"
.
Vous devez vous connecter pour publier un commentaire.
Python 3.4+
Utilisation
html.ne pas encoder()
:FYI
html.parser.HTMLParser.unescape
est obsolète, et était censé être retiré en 3.5, même s'il a été laissé par erreur. Il sera retiré de la langue bientôt.Python 2.6-3.3
Vous pouvez utiliser
HTMLParser.unescape()
de la bibliothèque standard:HTMLParser
html.l'analyseur
Vous pouvez également utiliser le
six
bibliothèque de compatibilité pour simplifier l'importation:unescape
méthode, l'ensemble de laHTMLParser
module ont été dépréciée en faveur dehtml.parser
.h.unescape(s).encode("utf-8")
. Les docs: """La définition proposée ici contient toutes les entités définies par XHTML 1.0 qui peuvent être gérées à l'aide de simple substitution textuelle dans le Latin-1 jeu de caractères ISO-8859-1)"""Belle Soupe poignées entité de conversion. Dans la Belle Soupe 3, vous aurez besoin de spécifier le
convertEntities
argument de laBeautifulSoup
constructeur (voir la 'Entité Conversion" section de la archivé docs). Dans la Belle Soupe de 4, les entités obtenir décodé automatiquement.Belle Soupe 3
Belle Soupe 4
BeautifulSoup4
utiliseHTMLParser
, la plupart du temps. Voir le sourceVous pouvez utiliser replace_entities de w3lib.html bibliothèque
Belle Soupe 4 vous permet de définir un module de formatage de votre sortie
C'est probablement ce qui n'est pas pertinent ici. Mais pour éliminer ces html entités de l'ensemble d'un document, vous pouvez faire quelque chose comme ceci: (à Supposer document = page et veuillez pardonner l'bâclée code, mais si vous avez des idées quant à la façon de la rendre meilleure, Im toutes les oreilles - Im nouveau à cela).
.unescape()
n'est que pour vous. Je ne comprends pas pourquoi vous et Rob ont posté ces trop compliqué solutions qui roulent leur propre entité de rattachement lors de la accepté de réponse montre clairement que.unescape()
pouvez trouver les entités de la chaîne.