解码&符号哈希字符串(&#124&#120&#97)等

Decoding ampersand hash strings (&#124&#120&#97)etc

其他答案中的解决方案我试了都不行,我试了那些方法输出的都是同样的字符串。

我正在尝试使用 Python 2.7 进行网络抓取。我已经下载了网页,它有一些形式为 &#120 的字符,其中 120 似乎代表 ascii 代码。我尝试使用 HTMLParser()decode() 方法,但似乎没有任何效果。 请注意,我从网页中获得的格式只是那些字符。 示例:

&#66&#108&#97&#115&#116&#101&#114&#106&#97&#120&#120&#32

请指导我使用 Python 解码这些字符串。我已经阅读了其他答案,但这些解决方案似乎对我不起作用。

字符引用的正确格式是 &#nnnn;,因此您的示例中缺少 ;。您可以添加 ; 然后使用 HTMLParser.unescape() :

from HTMLParser import HTMLParser
import re
x ='&#66&#108&#97&#115&#116&#101&#114&#106&#97&#120&#120&#32'
x = re.sub(r'(&#[0-9]*)', r';', x)
print x
h = HTMLParser()
print h.unescape(x)

这给出了这个输出:

Blasterjaxx 
Blasterjaxx 

根据您正在做的事情,您可能希望将该数据转换为有效的 HTML character references,以便您可以使用适当的 HTML 解析器在上下文中解析它。

但是,提取数字字符串并将它们自己转换为等效的 ASCII 字符非常容易。例如,

s ='&#66&#108&#97&#115&#116&#101&#114&#106&#97&#120&#120&#32'
print ''.join([chr(int(u)) for u in s.split('&#') if u])

输出

Blasterjaxx 

if u 跳过我们得到的初始空字符串,因为 s 以拆分字符串 '&#' 开头。或者,我们可以通过切片来跳过它:

''.join([chr(int(u)) for u in s.split('&#')[1:]])

在Python3、使用html模块:

>>> import html
>>> html.unescape('&#66&#108&#97&#115&#116&#101&#114&#106&#97&#120&#120&#32')
'Blasterjaxx '

文档:https://docs.python.org/3/library/html.html