HTML实体代码到文本

时间:2009-03-19 17:01:26

标签: python html beautifulsoup

有没有人知道Python中一种简单的方法,可以将带有HTML实体代码的字符串(例如< &)转换为普通字符串(例如<&)?

cgi.escape()会转义字符串(很差),但没有unescape()

4 个答案:

答案 0 :(得分:41)

HTMLParser具有标准库中的功能。不幸的是,它没有证件:

(Python2 Docs

>>> import HTMLParser
>>> h= HTMLParser.HTMLParser()
>>> h.unescape('alpha < β')
u'alpha < \u03b2'

(Python 3 Docs

>>> import html.parser
>>> h = html.parser.HTMLParser()
>>> h.unescape('alpha &lt; &beta;')
'alpha < \u03b2'
记录了

htmlentitydefs,但要求您自己完成大量工作。

如果您只需要XML预定义实体(lt,gt,amp,quot,apos),则可以使用minidom来解析它们。如果您只需要预定义的实体而不需要数字字符引用,您甚至可以使用普通的旧字符串替换速度。

答案 1 :(得分:12)

我最初忘了标记它,但我正在使用BeautifulSoup。

在文档中挖掘,我发现:

soup = BeautifulSoup(html, convertEntities=BeautifulSoup.HTML_ENTITIES)

完全像我希望的那样。

答案 2 :(得分:1)

Python stdlib中没有任何内容可以用于unescape HTML,但是有一个简短的脚本可以根据您的需求定制http://www.w3.org/QA/2008/04/unescape-html-entities-python。html。

答案 3 :(得分:1)

使用htmlentitydefs模块。这是我的旧代码,它有效,但我确信有更清洁,更pythonic的方式来做它:

e2c = dict(('&%s;'%k,eval("u'\\u%04x'"%v)) for k, v in htmlentitydefs.name2codepoint.items())