Удалить HTML-теги в AppEngine Python Env (эквивалент очистки Ruby)

StackOverflow https://stackoverflow.com/questions/2415008

Вопрос

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

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

Это было полезно?

Решение

>>> 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']

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

Другие советы

Если вы не хотите использовать отдельные библиотеки, то вы можете импортировать стандартные утилиты 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, так что вам больше ничего не нужно, просто используйте filter, вот так:

{{ unsafehtml|striptags }}

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

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

С принтами:

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

Поздно, но.

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

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

from jinja2 import Markup 
Markup("<div>About</div>").striptags()
u'About'
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top