从python中的字符串安全地删除所有html代码

时间:2013-04-09 00:37:46

标签: python html security parsing utf-8

我一直在阅读许多q& a关于如何使用python从字符串中删除所有html代码但没有一个令人满意。我需要一种方法来删除所有标签,保留/转换html实体并使用utf-8字符串。

显然,BeautifulSoup容易受到一些特制的html字符串的攻击,我用HTMLParser构建了一个简单的解析器来获取文本,但是我丢失了实体

from HTMLParser import HTMLParser

class MyHTMLParser(HTMLParser):
    def __init__(self):
        HTMLParser.__init__(self)
        self.data = []

    def handle_data(self, data):
        self.data.append(data)

    def handle_charref(self, name):
        self.data.append(name)

    def handle_entityref(self, ent):
        self.data.append(ent)

给了我类似的东西

  

[u'Asia,sp',u'cialiste du voyage',...

在spécialiste中失去重音“e”的实体。

使用众多正则表达式中的一个,您可以找到类似问题的答案,它总会有一些未考虑的边缘情况。

我可以使用任何非常好的模块吗?

2 个答案:

答案 0 :(得分:4)

bleach非常适合这项任务。它可以满足您的一切需求。它有一个广泛的测试套件,可以检查标签可能漏掉的奇怪边缘情况。我从来没有遇到过这个问题。

答案 1 :(得分:1)

可能是pyquery?尝试easy_install / pip install pyquery;然后是一些代码:

from pyquery import PyQuery as jQ

dom = jQ("<html>...</html>")
print dom("body").text()