关于python爬虫中的一些问题--6 UnicodeDecodeError: 'utf-8' codec can't decode byte

1,014 阅读1分钟

背景:

在python爬虫中,对于获取到的内容,或许需要进行解码操作。如:

result = res.decode('utf-8')

这时,可能会出现报错:UnicodeDecodeError: 'utf-8' codec can't decode byte

该情况可能是是由于出现了无法进行转换的 二进制数据 造成的。

解决办法

写一个小脚本进行一下判断,是整体的字符集参数选择上出现了问题,还是出现了部分的无法转换的二进制块。

#以读入文件为例:
f = open("data.txt","rb")#二进制格式读文件
while True:
    line = f.readline()
    if not line:
        break
    else:
        try:
            #print(line.decode('utf8'))
            line.decode('utf8')
            #为了暴露出错误,最好此处不print
        except:
            print(str(line))

1、如果输出的代码都是hex形式的,可能就是你选择的解码字符集出现了错误。

2、如果是字符集出现错误,建议多选择几种字符集测试一下: 选择的经验是: 如果是爬取到的网页文件,可以查看网页文件的meta标签下的charset属性值。如:

<meta charset="UTF-8">

3、如果以上办法依旧无用,可尝试修改字符集参数,一般这种情况出现得较多是在国标码(GBK)和utf8之间选择出现了问题。 出现异常报错是由于设置了decode()方法的第二个参数errors为严格(strict)形式造成的,因为默认就是这个参数,将其更改为ignore等即可。例如:

line.decode("utf8","ignore")