J'analyse du HTML avec Beautiful Soup 3, mais il contient des entités HTML que Beautiful Soup 3 ne décode pas automatiquement pour moi:
>>> from BeautifulSoup import BeautifulSoup
>>> soup = BeautifulSoup("<p>£682m</p>")
>>> text = soup.find("p").string
>>> print text
£682m
Comment puis-je décoder les entités HTML text
pour obtenir à la "£682m"
place de "£682m"
.
Réponses:
Python 3.4+
Utilisation
html.unescape()
:FYI
html.parser.HTMLParser.unescape
est obsolète et devait être supprimé en 3.5 , bien qu'il ait été laissé par erreur. Il sera bientôt supprimé de la langue.Python 2.6-3.3
Vous pouvez utiliser à
HTMLParser.unescape()
partir de la bibliothèque standard:HTMLParser
html.parser
Vous pouvez également utiliser la
six
bibliothèque de compatibilité pour simplifier l'importation:la source
unescape
méthode, leHTMLParser
module entier soit déconseillé en faveur dehtml.parser
.h.unescape(s).encode("utf-8")
. Les documents: "" "La définition fournie ici contient toutes les entités définies par XHTML 1.0 qui peuvent être gérées en utilisant une simple substitution textuelle dans le jeu de caractères Latin-1 (ISO-8859-1)" ""Beautiful Soup gère la conversion d'entité. Dans Beautiful Soup 3, vous devrez spécifier l'
convertEntities
argument auBeautifulSoup
constructeur (voir la section 'Entity Conversion' des documents archivés). Dans Beautiful Soup 4, les entités sont décodées automatiquement.Belle soupe 3
Belle soupe 4
la source
BeautifulSoup4
utiliseHTMLParser
, principalement. Voir la sourceVous pouvez utiliser replace_entities à partir de la bibliothèque w3lib.html
la source
Beautiful Soup 4 vous permet de définir un formateur à votre sortie
la source
J'ai eu un problème d'encodage similaire. J'ai utilisé la méthode normalize (). J'obtenais une erreur Unicode en utilisant la méthode pandas .to_html () lors de l'exportation de mon bloc de données vers un fichier .html dans un autre répertoire. J'ai fini par faire ça et ça a marché ...
L'objet dataframe peut être ce que vous voulez, appelons-le table ...
encoder les données de la table afin que nous puissions les exporter vers un fichier .html dans le dossier des modèles (cela peut être l'emplacement que vous souhaitez :))
exporter une chaîne normalisée dans un fichier html
Référence: documentation unicodedata
la source
Ce n'est probablement pas pertinent ici. Mais pour éliminer ces entites html d'un document entier, vous pouvez faire quelque chose comme ceci: (Supposons que document = page et veuillez pardonner le code bâclé, mais si vous avez des idées sur la façon de l'améliorer, je suis toutes les oreilles - je suis nouveau pour ce).
la source
.unescape()
fait ça pour vous . Je ne comprends pas pourquoi vous et Rob avez publié ces solutions trop compliquées qui roulent leur propre correspondance d'entité alors que la réponse acceptée montre déjà clairement que.unescape()
peut trouver des entités dans la chaîne.