HTML实体代码到文本[重复]

Posted

技术标签:

【中文标题】HTML实体代码到文本[重复]【英文标题】:HTML Entity Codes to Text [duplicate] 【发布时间】:2010-10-14 08:46:44 【问题描述】:

有谁知道在 Python 中将带有 html 实体代码的字符串(例如 <&)转换为普通字符串(例如

cgi.escape() 将转义字符串(效果不佳),但没有unescape()

【问题讨论】:

【参考方案1】:

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

(Python2Docs)

>>> 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 不知道HTMLParser的那个功能 这是一个来自标准库的文档化函数,它将转义的 HTML 代码转换为普通字符串:docs.python.org/library/… 在 Python 3.4 中,是documented。【参考方案2】:

一开始我忘了标记它,但我正在使用 BeautifulSoup。

在文档中挖掘,我发现:

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

完全按照我的希望进行。

【讨论】:

这仅适用于 BS4 之前的 BeautifulSoup 版本。如果您使用的是 BS4,则必须使用格式化程序:crummy.com/software/BeautifulSoup/bs4/doc/#output-formatters 它不适用于 &实际上,如果一个字符串包含 '&',BeautifulSoup 会将其转换回 &,这与我希望的相反。【参考方案3】:

Python 标准库中没有内置任何东西来对 HTML 进行转义,但您可以在 http://www.w3.org/QA/2008/04/unescape-html-entities-python.html 处定制一个简短的脚本以满足您的需求。

【讨论】:

Python 标准库中内置了一个东西来对 HTML 进行转义。请查看接受的答案并编辑您的答案。【参考方案4】:

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

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

【讨论】:

以上是关于HTML实体代码到文本[重复]的主要内容,如果未能解决你的问题,请参考以下文章

在 CSS 内容中添加“黑色右指向指针”HTML 实体 [重复]

将 JSON 从烧瓶传递到模板并解码 html 实体 [重复]

实体框架代码第一个值对象持久保存到数据库[重复]

使用 JavaScript (RegExp) 转换 HTML 实体 [重复]

为啥在更新现有实体时会出现重复的实体?

CSS垂直对齐文本到图像的中间[重复]