由于标题有字符限制没有办法将主题说的更明白,就将错误信息贴了上去,望谅解
场景:使用Python进行斗鱼直播页面的爬取,爬取的url:https://www.douyu.com/ 当使用str(爬取的html字节码,encoding=‘utf-8’)进行一个编码转换的时候报UnicodeDecodeError: ‘utf-8’ codec can’t decode byte 0x8b in position 1: invalid start byte这个错误。
from urllib import request
class Spilder():
#斗鱼url
url='https://www.douyu.com/'
def __fetch_content(self):
r = request.urlopen(Spilder.url)
htmls = r.read() #获取字节码(html)
print(htmls)
htmls = str(htmls, encoding='utf-8')
print(htmls)
def go(self):
self.__fetch_content()
spilder=Spilder()
spilder.go()
首先我们观察第一个print输出的字节码可以看到它是以"b’\x1f\x8b\x08"开头的 ,说明它是gzip压缩过的数据,这也是报错的原因,所以我们需要对我们接收的字节码进行一个解码操作。修改如下:
from urllib import request
from io import BytesIO
import gzip
class Spilder():
url='https://www.douyu.com/'
def __fetch_content(self):
r = request.urlopen(Spilder.url)
htmls = r.read()
buff = BytesIO(htmls)
f = gzip.GzipFile(fileobj=buff)
htmls = f.read().decode('utf-8')
print(htmls)
def go(self):
self.__fetch_content()
spilder=Spilder()
spilder.go()