我正在寻找一个python模块,它可以帮助我摆脱HTML标签,但保留文本值。之前我尝试过BeautifulSoup,我无法弄清楚如何完成这个简单的任务。我尝试搜索可以执行此操作的Python模块,但它们似乎都依赖于其他在AppEngine上运行不正常的库。
以下是来自Ruby的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
答案 0 :(得分:5)
>>> 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)
。
答案 1 :(得分:4)
如果您不想使用单独的库,则可以导入标准的django utils。例如:
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 }}
不过,这是最快的方式之一。
答案 2 :(得分:1)
使用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
答案 3 :(得分:1)
#!/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)
打印:
这是一个链接和一些粗体文字,后跟一个图像
答案 4 :(得分:1)
晚了,但是。
您可以使用Jinja2.Markup()
http://jinja.pocoo.org/docs/api/#jinja2.Markup.striptags
from jinja2 import Markup
Markup("<div>About</div>").striptags()
u'About'