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

Iva*_*ich 5 html python decode

尝试其他答案时,这些解决方案不起作用,尝试这些方法时,输出的字符串相同。

我正在尝试使用Python 2.7进行网络抓取。我已经下载了网页,其中包含一些字符,这些字符的形式&#120似乎是120代表ASCII代码。我尝试使用HTMLParser()decode()方法,但似乎无济于事。请注意,我在网页上所获得的格式仅为这些字符。例:

&#66&#108&#97&#115&#116&#101&#114&#106&#97&#120&#120&#32
Run Code Online (Sandbox Code Playgroud)

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

Fab*_*ich 5

字符引用的正确格式是,&#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'\1;', x)
print x
h = HTMLParser()
print h.unescape(x)
Run Code Online (Sandbox Code Playgroud)

这给出了这个输出:

Blasterjaxx 
Blasterjaxx 
Run Code Online (Sandbox Code Playgroud)


PM *_*ing 3

根据您正在执行的操作,您可能希望将该数据转换为有效的 HTML字符引用,以便您可以使用适当的 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])
Run Code Online (Sandbox Code Playgroud)

输出

Blasterjaxx 
Run Code Online (Sandbox Code Playgroud)

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

''.join([chr(int(u)) for u in s.split('&#')[1:]])
Run Code Online (Sandbox Code Playgroud)