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.

-

War es hilfreich?

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'
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top