举一个利用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'))
报错信息为:
查看该网页源代码,发现网页确实是以gbk的编码方式,但是解码还是报错了。个人觉得是因为该网站的编写不规范,而导致resquest库去解码的时候容易产生一些错误或者警告⚠。将光标放到decode函数上,按ctrl+B打开decode函数的代码(我用的PyCharm):
注释内容大致意思为:该函数提供用于处理解码错误的错误处理方案,其中默认值为“严格”,这意味着解码错误会引起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'))
这样我们就可以正确爬取该网站的信息了: