Estoy analizando algo de HTML con Beautiful Soup 3, pero contiene entidades HTML que Beautiful Soup 3 no decodifica automáticamente para mí:
>>> from BeautifulSoup import BeautifulSoup
>>> soup = BeautifulSoup("<p>£682m</p>")
>>> text = soup.find("p").string
>>> print text
£682m
¿Cómo puedo decodificar las entidades HTML text
para obtener en "£682m"
lugar de "£682m"
.
Respuestas:
Python 3.4+
Uso
html.unescape()
:FYI
html.parser.HTMLParser.unescape
está en desuso y se suponía que debía eliminarse en 3.5 , aunque se dejó por error. Se eliminará del idioma pronto.Python 2.6-3.3
Puede usar
HTMLParser.unescape()
desde la biblioteca estándar:HTMLParser
html.parser
También puede usar la
six
biblioteca de compatibilidad para simplificar la importación:fuente
unescape
método,HTMLParser
se desaprobara todo el módulo a favorhtml.parser
.h.unescape(s).encode("utf-8")
. Los documentos: "" "La definición provista aquí contiene todas las entidades definidas por XHTML 1.0 que pueden manejarse usando una simple sustitución textual en el conjunto de caracteres Latin-1 (ISO-8859-1)" ""Beautiful Soup maneja la conversión de entidades. En Beautiful Soup 3, deberá especificar el
convertEntities
argumento alBeautifulSoup
constructor (consulte la sección 'Conversión de entidades' de los documentos archivados). En Beautiful Soup 4, las entidades se decodifican automáticamente.Hermosa sopa 3
Hermosa sopa 4
fuente
BeautifulSoup4
usosHTMLParser
, en su mayoría. Ver la fuentePuede usar replace_entities de la biblioteca w3lib.html
fuente
Beautiful Soup 4 te permite configurar un formateador a tu salida
fuente
Tuve un problema de codificación similar. Usé el método normalize (). Estaba recibiendo un error Unicode usando el método pandas .to_html () al exportar mi marco de datos a un archivo .html en otro directorio. Terminé haciendo esto y funcionó ...
El objeto de marco de datos puede ser lo que quieras, llamémoslo tabla ...
codifique los datos de la tabla para que podamos exportarlos a un archivo .html en la carpeta de plantillas (esta puede ser la ubicación que desee :))
exportar cadena normalizada a archivo html
Referencia: documentación unicodedata
fuente
Esto probablemente no es relevante aquí. Pero para eliminar estas entidades html de un documento completo, puede hacer algo como esto: (Asumir documento = página y perdone el código descuidado, pero si tiene ideas sobre cómo mejorarlo, soy todo oídos - Soy nuevo en esta).
fuente
.unescape()
hace que para usted . No entiendo por qué usted y Rob han publicado estas soluciones demasiado complicadas que incluyen su propia coincidencia de entidades cuando la respuesta aceptada ya muestra claramente que.unescape()
pueden encontrar entidades en la cadena.