Supprimer les balises HTML dans AppEngine Python Env (équivalent à Désinfecter Ruby)
-
19-09-2019 - |
Question
Je cherche un module python qui me permettra de se débarrasser des balises HTML, mais conserver les valeurs de texte. J'ai essayé BeautifulSoup avant et je ne pouvais pas comprendre comment faire cette tâche simple. J'ai essayé la recherche de modules Python qui pourrait le faire, mais ils semblent tous dépendre d'autres bibliothèques qui ne fonctionne pas bien sur AppEngine.
Voici un exemple de code de la bibliothèque de sanitize de Ruby et que ce que je suis après 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'
Merci pour vos suggestions.
-e
La solution
>>> 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']
Cela vous donne une liste de chaînes (Unicode). Si vous voulez transformer en une seule chaîne, utilisez ''.join(thatlist)
.
Autres conseils
Si vous ne voulez pas utiliser libs séparés alors vous pouvez importer des utils standards de django. Par exemple:
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
En outre son déjà inclus dans les modèles de Django, de sorte que vous ne avez pas besoin toute autre chose, utilisez simplement le filtre, comme ceci:
{{ unsafehtml|striptags }}
BTW, c'est l'un des plus rapide.
Utilisation 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)
Prints:
est un lien et un texte en gras suivi d'une image
fin, mais.
Vous pouvez utiliser Jinja2.Markup ()
http://jinja.pocoo.org/docs/api/# jinja2.Markup.striptags
from jinja2 import Markup
Markup("<div>About</div>").striptags()
u'About'