有谁知道在 Python 中将带有 HTML 实体代码(例如<
&
)的字符串转换为普通字符串(例如 < &)的简单方法?
cgi.escape()
将转义字符串(很差),但没有unescape()
.
有谁知道在 Python 中将带有 HTML 实体代码(例如<
&
)的字符串转换为普通字符串(例如 < &)的简单方法?
cgi.escape()
将转义字符串(很差),但没有unescape()
.
HTMLParser具有标准库中的功能。不幸的是,它没有记录:
(Python2文档)
>>> import HTMLParser
>>> h= HTMLParser.HTMLParser()
>>> h.unescape('alpha < β')
u'alpha < \u03b2'
(Python 3文档)
>>> import html.parser
>>> h = html.parser.HTMLParser()
>>> h.unescape('alpha < β')
'alpha < \u03b2'
htmlentitydefs已记录在案,但需要您自己完成大量工作。
如果您只需要 XML 预定义实体(lt、gt、amp、quot、apos),您可以使用 minidom 来解析它们。如果您只需要预定义的实体而不需要数字字符引用,您甚至可以使用普通的旧字符串替换来提高速度。
一开始我忘了标记它,但我使用的是 BeautifulSoup。
在文档中挖掘,我发现:
soup = BeautifulSoup(html, convertEntities=BeautifulSoup.HTML_ENTITIES)
完全按照我的希望进行。
Python stdlib 中没有内置任何内容来对 HTML 进行转义,但是您可以在http://www.w3.org/QA/2008/04/unescape-html-entities-python .html 上根据您的需要定制一个简短的脚本。
使用htmlentitydefs模块。这是我的旧代码,它有效,但我确信有更清洁和更 Pythonic 的方式来做到这一点:
e2c = dict(('&%s;'%k,eval("u'\\u%04x'"%v)) for k, v in htmlentitydefs.name2codepoint.items())