有没有一种简单的Python方法可以将带有HTML实体代码(例如<
&
)的字符串转换为普通字符串(例如< &)?
cgi.escape()
可以转义字符串(效果不佳),但没有unescape()
。
有没有一种简单的Python方法可以将带有HTML实体代码(例如<
&
)的字符串转换为普通字符串(例如< &)?
cgi.escape()
可以转义字符串(效果不佳),但没有unescape()
。
HTMLParser是Python标准库中具备相关功能的模块,不过遗憾的是它没有文档说明:
(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)
它正好做到了我所期望的。
使用htmlentitydefs模块。这是我的旧代码,它可以工作,但我相信有更简洁和更符合Python风格的方法来完成它:
e2c = dict(('&%s;'%k,eval("u'\\u%04x'"%v)) for k, v in htmlentitydefs.name2codepoint.items())
Python标准库中没有内置反转义HTML的功能,但是你可以在http://www.w3.org/QA/2008/04/unescape-html-entities-python.html找到一个简短的脚本,可以根据你的需求进行调整。