5

我想将 HTML 实体转换回其人类可读的格式,例如'£'转换为“£”、'°'转换为“°”等。

我已经阅读了几篇关于这个问题的帖子

使用 Python 2.x 将 html 源内容转换为可读格式

在 Python 字符串中解码 HTML 实体?

在 Python 中将 XML/HTML 实体转换为 Unicode 字符串

根据他们的说法,我选择使用未记录的函数 unescape(),但它对我不起作用......

我的代码示例如下:

import HTMLParser

htmlParser = HTMLParser.HTMLParser()
decoded = htmlParser.unescape('© 2013')
print decoded

当我运行这个 python 脚本时,输出仍然是:

© 2013

代替

© 2013

我正在使用 Python 2.X,在 Windows 7 和 Cygwin 控制台上工作。我用谷歌搜索并没有发现任何类似的问题..有人可以帮我解决这个问题吗?

4

3 回答 3

6

显然HTMLParser.unescapePython 2.6之前有点原始

蟒蛇2.5:

>>> import HTMLParser
>>> HTMLParser.HTMLParser().unescape('©')
'©'

Python 2.6/2.7:

>>> import HTMLParser
>>> HTMLParser.HTMLParser().unescape('©')
u'\xa9'

查看2.5 实现2.6 实现/ 2.7 实现

于 2014-04-04T10:26:26.740 回答
1

该站点列出了一些解决方案,这是其中之一:

from xml.sax.saxutils import escape, unescape

html_escape_table = {
    '"': """,
    "'": "'",
    "©": "©"
    # etc...
}
html_unescape_table = {v:k for k, v in html_escape_table.items()}

def html_unescape(text):
    return unescape(text, html_unescape_table)

不过,这不是最漂亮的事情,因为您必须手动列出每个转义符号。

编辑:

这个怎么样?

import htmllib

def unescape(s):
    p = htmllib.HTMLParser(None)
    p.save_bgn()
    p.feed(s)
    return p.save_end()
于 2013-07-19T17:15:50.427 回答
0

从 python 3.9 开始使用HTMLParser()unescape(<str>)将导致错误AttributeError: 'HTMLParser' object has no attribute 'unescape'

您可以将其更新为:

import html
html.unescape(<str>)
于 2022-01-20T21:37:42.277 回答