UnicodeDecodeError: 'gbk' codec can't decode byte 0xd0 in position 23475: illegal multibyte sequence

Python爬虫错误:UnicodeDecodeError: ‘gbk’ codec can’t decode byte 0xd0 in position 23475: illegal multibyte sequence

举一个利用Python网络爬虫爬取电影天堂网站电影数据发生解码错误的例子:

报错的原代码如下:

#爬取电影天堂电影信息

from lxml import etree
import requests

url = "https://www.ygdy8.net/html/gndy/dyzz/list_23_1.html"
headers = {
    'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:74.0) Gecko/20100101 Firefox/74.0'
}
response = requests.get(url,headers=headers)
print(response.content.decode(encoding='gbk'))

报错信息为:

UnicodeDecodeError: 'gbk' codec can't decode byte 0xd0 in position 23475: illegal multibyte sequence_第1张图片
查看该网页源代码,发现网页确实是以gbk的编码方式,但是解码还是报错了。个人觉得是因为该网站的编写不规范,而导致resquest库去解码的时候容易产生一些错误或者警告⚠。将光标放到decode函数上,按ctrl+B打开decode函数的代码(我用的PyCharm):

UnicodeDecodeError: 'gbk' codec can't decode byte 0xd0 in position 23475: illegal multibyte sequence_第2张图片
注释内容大致意思为:该函数提供用于处理解码错误的错误处理方案,其中默认值为“严格”,这意味着解码错误会引起UnicodeDecodeError。 其他可以设定的值是“忽略”和“替换”,可以有效避免错误UnicodeDecodeError。我们选择参数“忽略”,因此可在decode函数后面添加参数:errors=‘ignore’

修改后的代码:


#爬取电影天堂电影信息

from lxml import etree
import requests

url = "https://www.ygdy8.net/html/gndy/dyzz/list_23_1.html"
headers = {
    'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:74.0) Gecko/20100101 Firefox/74.0'
}
response = requests.get(url,headers=headers)
print(response.content.decode(encoding='gbk', errors='ignore'))

这样我们就可以正确爬取该网站的信息了:

UnicodeDecodeError: 'gbk' codec can't decode byte 0xd0 in position 23475: illegal multibyte sequence_第3张图片

你可能感兴趣的:(python,数据挖掘)