Rimuovere i tag HTML in AppEngine Python Env (equivalente per disinfettare Ruby)
-
19-09-2019 - |
Domanda
Sto cercando un modulo Python che mi aiuterà a sbarazzarsi di tag HTML ma mantenere i valori di testo. Ho provato BeautifulSoup prima e non riuscivo a capire come fare questo compito semplice. Ho provato a cercare per i moduli Python che potrebbe fare questo, ma tutti sembrano essere dipendente da altre biblioteche che non funziona bene su AppEngine.
Di seguito è riportato un codice di esempio dalla libreria Sanitize di Ruby e questo è quello che sono dopo in 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'
Grazie per i vostri suggerimenti.
-e
Soluzione
>>> 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']
Questo vi dà una lista di stringhe (Unicode). Se si vuole trasformarlo in una singola stringa, utilizzare ''.join(thatlist)
.
Altri suggerimenti
Se non si desidera utilizzare librerie separati, allora è possibile importare Django standard di utils. Ad esempio:
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
Anche la sua già incluso nei modelli di Django, in modo da non avete bisogno di qualsiasi altra cosa, basta usare il filtro, in questo modo:
{{ unsafehtml|striptags }}
A proposito, questo è uno dei modo più veloce.
Utilizzando 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)
Stampe:
questo è un link e un po 'di testo in grassetto seguita da un'immagine
ritardo, ma.
È possibile utilizzare Jinja2.Markup ()
http://jinja.pocoo.org/docs/api/# jinja2.Markup.striptags
from jinja2 import Markup
Markup("<div>About</div>").striptags()
u'About'