Pregunta

    

Esta pregunta ya tiene una respuesta aquí:

         

¿Alguien sabe una manera fácil en Python para convertir una cadena con códigos de entidad HTML (por ejemplo, &lt; &amp;) en una cadena normal (por ejemplo, < & amp;)?

cgi.escape() escapará de las cadenas (mal), pero no hay unescape().

¿Fue útil?

Solución

HTMLParser tiene la funcionalidad en la biblioteca estándar. Desafortunadamente, no está documentado:

(Python2 Documentos )

>>> import HTMLParser
>>> h= HTMLParser.HTMLParser()
>>> h.unescape('alpha &lt; &beta;')
u'alpha < \u03b2'

(Python 3 Documentos )

>>> import html.parser
>>> h = html.parser.HTMLParser()
>>> h.unescape('alpha &lt; &beta;')
'alpha < \u03b2'

htmlentitydefs está documentado, pero requiere que usted haga muchas el trabajo usted mismo.

Si solo necesita las entidades predefinidas XML (lt, gt, amp, quot, apos), puede usar minidom para analizarlas. Si solo necesita las entidades predefinidas y ninguna referencia de caracteres numéricos, incluso podría usar un reemplazo simple de cadena antigua para la velocidad.

Otros consejos

Olvidé etiquetarlo al principio, pero estoy usando BeautifulSoup.

Buscando en la documentación, encontré:

soup = BeautifulSoup(html, convertEntities=BeautifulSoup.HTML_ENTITIES)

lo hace exactamente como esperaba.

No hay nada integrado en Python stdlib para dejar de escanear HTML, pero hay un script corto que puede adaptar a sus necesidades en http://www.w3.org/QA/2008/04/unescape-html-entities-python .html.

Utilice el módulo htmlentitydefs . Este mi antiguo código funcionó, pero estoy seguro de que hay una forma más limpia y más pitónica de hacerlo:

e2c = dict(('&%s;'%k,eval("u'\\u%04x'"%v)) for k, v in htmlentitydefs.name2codepoint.items())
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top