14

有谁知道在 Python 中将带有 HTML 实体代码(例如&lt; &amp;)的字符串转换为普通字符串(例如 < &)的简单方法?

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

4

4 回答 4

45

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

(Python2文档

>>> import HTMLParser
>>> h= HTMLParser.HTMLParser()
>>> h.unescape('alpha &lt; &beta;')
u'alpha < \u03b2'

(Python 3文档

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

htmlentitydefs已记录在案,但需要您自己完成大量工作。

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

于 2009-03-19T17:20:56.613 回答
12

一开始我忘了标记它,但我使用的是 BeautifulSoup。

在文档中挖掘,我发现:

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

完全按照我的希望进行。

于 2009-03-19T17:45:15.713 回答
1

Python stdlib 中没有内置任何内容来对 HTML 进行转义,但是您可以在http://www.w3.org/QA/2008/04/unescape-html-entities-python .html 上根据您的需要定制一个简短的脚本。

于 2009-03-19T17:03:50.447 回答
1

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

e2c = dict(('&%s;'%k,eval("u'\\u%04x'"%v)) for k, v in htmlentitydefs.name2codepoint.items())
于 2009-03-19T17:22:30.447 回答