Quitar las etiquetas HTML en Python AppEngine Env (equivalente a Desinfección de Ruby)
-
19-09-2019 - |
Pregunta
Busco a un módulo de Python que le ayudará a deshacerse de las etiquetas HTML, pero mantener los valores de texto. Probé BeautifulSoup antes y no podía encontrar la manera de hacer esta tarea sencilla. He intentado buscar los módulos Python que podrían hacer esto, pero todos parecen ser dependientes de otras bibliotecas que no funcionan bien en App Engine.
A continuación se muestra un código de ejemplo de la biblioteca de higienización de Ruby y eso es lo que busco en Python:
require 'rubygems'
require 'sanitize'
html = '<b><a href="http://foo.com/">foo</a></b><img src="http://foo.com/bar.jpg" />'
Sanitize.clean(html) # => 'foo'
Gracias por sus sugerencias.
-e
Solución
>>> import BeautifulSoup
>>> html = '<b><a href="http://foo.com/">foo</a></b><img src="http://foo.com/bar.jpg" />'
>>> bs = BeautifulSoup.BeautifulSoup(html)
>>> bs.findAll(text=True)
[u'foo']
Esto le da una lista de cadenas (Unicode). Si desea convertirla en una sola cadena, utilice ''.join(thatlist)
.
Otros consejos
Si no desea utilizar bibliotecas separadas a continuación, puede importar Django estándar utilidades. Por ejemplo:
from django.utils.html import strip_tags
html = '<b><a href="http://foo.com/">foo</a></b><img src="http://foo.com/bar.jpg'
stripped = strip_tags(html)
print stripped
# you got: foo
Además de su ya incluidos en las plantillas de Django, por lo que no necesita nada más, sólo tiene que utilizar el filtro, como esto:
{{ unsafehtml|striptags }}
Por cierto, esta es una de la manera más rápida.
El uso de lxml:
htmlstring = '<b><a href="http://foo.com/">foo</a></b><img src="http://foo.com/bar.jpg" />'
from lxml.html import fromstring
mySearchTree = fromstring(htmlstring)
for item in mySearchTree.cssselect('a'):
print item.text
#!/usr/bin/python
from xml.dom.minidom import parseString
def getText(el):
ret = ''
for child in el.childNodes:
if child.nodeType == 3:
ret += child.nodeValue
else:
ret += getText(child)
return ret
html = '<b>this is <a href="http://foo.com/">a link </a> and some bold text </b> followed by <img src="http://foo.com/bar.jpg" /> an image'
dom = parseString('<root>' + html + '</root>')
print getText(dom.documentElement)
Las impresiones:
Este es un enlace y un poco de texto en negrita, seguido de una imagen
tarde, pero.
Puede utilizar Jinja2.Markup ()
http://jinja.pocoo.org/docs/api/# jinja2.Markup.striptags
from jinja2 import Markup
Markup("<div>About</div>").striptags()
u'About'