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

D.Q*_*.Q. 4 html python unicode

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

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

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

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

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

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

我的代码示例如下:

import HTMLParser

htmlParser = HTMLParser.HTMLParser()
decoded = htmlParser.unescape('© 2013')
print decoded
Run Code Online (Sandbox Code Playgroud)

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

© 2013
Run Code Online (Sandbox Code Playgroud)

代替

© 2013
Run Code Online (Sandbox Code Playgroud)

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

DrM*_*ers 6

显然HTMLParser.unescape是一个更原始一点之前的Python 2.6.

Python 2.5:

>>> import HTMLParser
>>> HTMLParser.HTMLParser().unescape('©')
'©'
Run Code Online (Sandbox Code Playgroud)

Python 2.6/2.7:

>>> import HTMLParser
>>> HTMLParser.HTMLParser().unescape('©')
u'\xa9'
Run Code Online (Sandbox Code Playgroud)

请参阅2.5实现2.6实现/2.7实现

  • 它是Python 3.4+中的`html.unescape()` (2认同)

and*_*rov 5

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

您可以将其更新为:

import html
html.unescape(<str>)
Run Code Online (Sandbox Code Playgroud)


Ale*_*ksi 1

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

\n\n
from xml.sax.saxutils import escape, unescape\n\nhtml_escape_table = {\n    \'"\': "&quot;",\n    "\'": "&apos;",\n    "\xc2\xa9": "&copy;"\n    # etc...\n}\nhtml_unescape_table = {v:k for k, v in html_escape_table.items()}\n\ndef html_unescape(text):\n    return unescape(text, html_unescape_table)\n
Run Code Online (Sandbox Code Playgroud)\n\n

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

\n\n

编辑:

\n\n

这个怎么样?

\n\n
import htmllib\n\ndef unescape(s):\n    p = htmllib.HTMLParser(None)\n    p.save_bgn()\n    p.feed(s)\n    return p.save_end()\n
Run Code Online (Sandbox Code Playgroud)\n