Удалить HTML-теги в AppEngine Python Env (эквивалент очистки Ruby)
-
19-09-2019 - |
Вопрос
Я ищу модуль 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'