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

È stato utile?

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'
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top