Python爬取Unicode编码遇到AttributeError: ‘str‘ object has no attribute ‘decode‘

前言:使用Python爬取某网站数据,内容是unicode编码的,用正则表达式截取成如下list保存

li = ['\\u97ea', '\\u867e', '\\u662f', '\\u9898', '\\u76ee', '\\u9898', '\\u5319']

打算解码成中文时出现了错误AttributeError: 'str' object has no attribute 'decode'

因为正则表达式提取的结果都是字符串,而字符串没有decode()方法,所以需要先编码成bytes类型再解码,code如下

s = '\\u662f'
print(s.encode().decode('unicode_escape'))
'''
是
'''

本任务中处理方式如下:

li = ['\\u97ea', '\\u867e', '\\u662f', '\\u9898', '\\u76ee', '\\u9898', '\\u5319']
# 使用 map 和匿名函数批处理
a = list(map(lambda x:x.encode().decode('unicode_escape'), li))
print(a)
'''
['韪', '虾', '是', '题', '目', '题', '匙']
'''
### 回答1: 这是Python的错误提示,意思是说字符串类型对象没有decode方法。可能是在使用Python 2时尝试对字符串进行解码操作导致的问题。在Python 3中,字符串默认以Unicode编码,不需要手动解码。 ### 回答2: 这个错误是因为在Python 3之后,str类型已经默认为unicode编码,不存在decode()方法。因此,如果在代码中使用了decode()方法,会提示“AttributeError: ‘strobject has no attributedecode’”。 通常这种错误会在使用Python 2代码或者将Python 2代码转换为Python 3代码时出现。在Python 3中,要想将字符串转换为bytes类型,可以使用encode()方法进行编码。例如: s = "Hello World" b = s.encode('utf-8') 这里将字符串s转换为utf-8编码的bytes类型,通过b变量来存储。 如果要将bytes类型转换为字符串,可以使用decode()方法,例如: b = b'Hello World' s = b.decode('utf-8') 这里将bytes类型的数据b转换为utf-8编码的字符串,通过s变量来存储。 另外,如果使用Python 2版本的代码,在Python 3中会出现类似的错误。因此,在将Python 2代码转换为Python 3代码时,需要注意以上的差异性。通常可以使用2to3工具进行代码转换,避免出现类似的错误。 ### 回答3: 在Python中,字符串(str)通常是被用来存储和处理文本信息的。字符串是不可变的序列对象,其中包含了Unicode字符集中的字符。对于Python2.x版本而言,字符串采用的是ASCII编码方式。而在Python3.x版本之后,则默认采用Unicode编码方式,因此Python3.x版本不再支持decode()方法。 当我们在Python3.x版本中使用字符串的decode()方法时,就会出现上述的错误信息AttributeError: 'str' object has no attribute 'decode',因为Python3.x的字符串(str)对象本身就不具备decode()方法。如果想要对字符串进行编解码处理,可以使用encode()方法进行编码操作,而解码操作则可以使用decode()方法。 举个例子,比如我们要将字符串以UTF-8编码方式进行编码处理可以使用以下代码: ```python str = "你好" bytes_str = str.encode('utf-8') print(bytes_str) # b'\xe4\xbd\xa0\xe5\xa5\xbd' ``` 而如果要对一个已经被UTF-8编码的字节串进行解码操作,则可以使用以下代码: ```python bytes_str = b'\xe4\xbd\xa0\xe5\xa5\xbd' str = bytes_str.decode('utf-8') print(str) # 你好 ``` 综上所述,在Python3.x版本中使用字符串的decode()方法时,会出现'AttributeError: 'str' object has no attribute 'decode''的错误提示,需要使用相关的编码和解码方法来代替。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值