Удалите HTML-теги в AppEngine Python Env (эквивалентно Ruby's Sanitize) - PullRequest
1 голос
/ 10 марта 2010

Я ищу модуль python, который поможет мне избавиться от тегов HTML, но сохранить текстовые значения. Я пробовал BeautifulSoup раньше, и я не мог понять, как выполнить эту простую задачу. Я попытался найти модули Python, которые могли бы сделать это, но все они, кажется, зависели от других библиотек, которые плохо работают на AppEngine.

Ниже приведен пример кода из библиотеки очистки Ruby, и это то, что мне нужно в 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'

Спасибо за ваши предложения.

-e

Ответы [ 5 ]

5 голосов
/ 10 марта 2010
>>> 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']

Это дает вам список (Unicode) строк. Если вы хотите превратить его в одну строку, используйте ''.join(thatlist).

4 голосов
/ 10 марта 2010

Если вы не хотите использовать отдельные библиотеки, вы можете импортировать стандартные утилиты django. Например:

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

Также он уже включен в шаблоны Django, так что вам больше ничего не нужно, просто используйте фильтр, например так:

{{ unsafehtml|striptags }}

Кстати, это один из самых быстрых способов.

1 голос
/ 02 декабря 2013

Поздно, но.

Вы можете использовать Jinja2.Markup ()

http://jinja.pocoo.org/docs/api/#jinja2.Markup.striptags

from jinja2 import Markup 
Markup("<div>About</div>").striptags()
u'About'
1 голос
/ 10 марта 2010
#!/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)

Печать:

это ссылка и текст, выделенный жирным шрифтом, за которым следует изображение

1 голос
/ 10 марта 2010

Использование 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
...