Entfernen Sie HTML-Tags in App Engine Python Env (äquivalent zu Rubys Sanitize)
-
19-09-2019 - |
Frage
Ich bin für ein Python-Modul, das mir loswerden HTML-Tags wird dazu beitragen, aber die Textwerte halten. Ich habe versucht, BeautifulSoup vor und ich kann nicht herausfinden, wie diese einfache Aufgabe zu tun. Ich habe versucht, für Python-Module suchen, die dies tun können, aber sie scheinen alle auf anderen Bibliotheken abhängig zu sein, die nicht gut auf App Engine funktionieren.
Im Folgenden finden Sie einen Beispielcode aus Rubys sanitize Bibliothek und das ist, was ich bin nach 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'
Vielen Dank für Ihre Anregungen.
-
Lösung
>>> 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']
Dies gibt Ihnen eine Liste von (Unicode) Zeichenketten. Wenn Sie es in einem einzelnen String aktivieren möchten, verwenden ''.join(thatlist)
.
Andere Tipps
Wenn Sie separate Libs nicht dann verwenden möchten Sie Standard django utils importieren. Zum Beispiel:
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
Auch seine bereits in Django-Vorlagen enthalten, so dass Sie nicht alles, was Sie sonst noch brauchen, benutzen Sie einfach Filter, wie folgt aus:
{{ unsafehtml|striptags }}
BTW, ist dies eine der am schnellsten Weg.
Mit 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:
Dies ist ein Link und einig fett gedruckten Text durch ein Bild, gefolgt
Späte, aber.
Sie können mit Jinja2.Markup ()
http://jinja.pocoo.org/docs/api/# jinja2.Markup.striptags
from jinja2 import Markup
Markup("<div>About</div>").striptags()
u'About'