删除AppEngine Python环境中的HTML标记(相当于Ruby的Sanitize)
我正在寻找一个python模块,它将帮助我摆脱HTML标记,但保留文本值。我以前试过BeautifulSoup,但我不知道如何完成这个简单的任务。我试着搜索能够做到这一点的Python模块,但它们似乎都依赖于其他在AppEngine上不能很好工作的库 下面是Ruby的sanitize库中的示例代码,这就是我在Python中所追求的:删除AppEngine Python环境中的HTML标记(相当于Ruby的Sanitize),python,google-app-engine,html-sanitizing,Python,Google App Engine,Html Sanitizing,我正在寻找一个python模块,它将帮助我摆脱HTML标记,但保留文本值。我以前试过BeautifulSoup,但我不知道如何完成这个简单的任务。我试着搜索能够做到这一点的Python模块,但它们似乎都依赖于其他在AppEngine上不能很好工作的库 下面是Ruby的sanitize库中的示例代码,这就是我在Python中所追求的: require 'rubygems' require 'sanitize' html = '<b><a href="http://foo.com
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使用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
使用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
这将提供Unicode字符串的列表。如果要将其转换为单个字符串,请使用.jointhatlist
这将提供Unicode字符串的列表。如果要将其转换为单个字符串,请使用.jointhatlist
印刷品:
这是一个链接和一些粗体文本,后跟一个图像
印刷品:
这是一个链接和一些粗体文本,后跟一个图像
如果不想使用单独的lib,那么可以导入标准的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
顺便说一句,这是最快的方法之一。如果不想使用单独的lib,那么可以导入标准的django util。例如:
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
顺便说一句,这是最快的方法之一。晚了,但是
您可以使用Jinja2.Markup
很晚了,但是
您可以使用Jinja2.Markup
谢谢阿玛霍什。我认为应用程序引擎支持minidom,所以应该可以很好地工作。Amarghosh,我接受了Alex的回答,因为BeautifulSoup似乎可以更好地处理糟糕的标记。非常感谢您提供的代码片段,不过我当然可以将其用于我可以信任的标记。谢谢Amarghosh。我认为应用程序引擎支持minidom,所以应该可以很好地工作。Amarghosh,我接受了Alex的回答,因为BeautifulSoup似乎可以更好地处理糟糕的标记。非常感谢您提供的代码片段,不过我当然可以将其用于我可以信任的标记。谢谢,Alex。这应该行得通——上次我尝试BeautifulSoup时,我一个节点一个节点地解析,速度变得非常慢。现在我已经改变了处理HTML代码的方式,我可以使用BeautifulSoup进行清理。我完全忘记了text=True选项。谢谢要在App Engine中使用,请在本地安装BeatifulSoup,并使用/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages中的文件。或者用这个:谢谢你,亚历克斯。这应该行得通——上次我尝试BeautifulSoup时,我一个节点一个节点地解析,速度变得非常慢。现在我已经改变了处理HTML代码的方式,我可以使用BeautifulSoup进行清理。我完全忘记了text=True选项。谢谢要在App Engine中使用,请在本地安装BeatifulSoup,并使用/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages中的文件。或者干脆用这个:谢谢,大红鲍勃。我花了一段时间让我的机器上运行的lxml符合您的代码-它可以工作!我还没有在AppEngine上测试过它,如果它不工作,我会告诉你。lxml似乎也能管理糟糕的标记。谢谢,bigredbob。我花了一段时间让我的机器上运行的lxml符合您的代码-它可以工作!我还没有在AppEngine上测试过它,如果它不工作,我会告诉你。lxml似乎也能管理糟糕的标记。谢谢,米哈伊尔。我来试试。谢谢,米哈伊尔。我要试一试。
{{ unsafehtml|striptags }}
from jinja2 import Markup
Markup("<div>About</div>").striptags()
u'About'