HTMLParser.HTMLParser()。unescape()不起作用

时间:2013-07-19 16:48:55

标签: python html unicode

我想将HTML实体转换回人类可读格式,例如'£'到'£','°'到'°'等。

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

Converting html source content into readable format with Python 2.x

Decode HTML entities in Python string?

Convert XML/HTML Entities into Unicode String in Python

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

我的代码示例如下:

import HTMLParser

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

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

© 2013

而不是

© 2013

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

2 个答案:

答案 0 :(得分:6)

显然HTMLParser.unescapebit more primitive之前是Python 2.6

Python 2.5:

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

Python 2.6 / 2.7:

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

请参阅2.5 implementation2.6 implementation / 2.7 implementation

答案 1 :(得分:1)

This site列出了一些解决方案,其中一个是:

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()