問題描述:在使用python爬取斗魚直播的數據時,使用str(讀取到的字節,編碼格式)進行解碼時報錯:'utf-8' codec can't decode byte 0x8b in position 1: invalid start byte
代碼如下:
from urllib import request class Spilder(): url='https://www.douyu.com/' def __fetch_content(self): r = request.urlopen(Spilder.url) htmls = r.read() #獲取字節碼(html) htmls = str(htmls, encoding='utf-8') def go(self): self.__fetch_content() spilder=Spilder() spilder.go()
問題原因:斷點調試的時候發現r.read()獲取到的字節碼是以‘b’\x1f\x8b\x08’開頭的,說明它是gzip壓縮過的數據,這也是報錯的原因,所以我們需要對我們接收的字節碼進行一個解碼操作。修改之后的代碼如下:
from urllib import request from io import BytesIO import gzip class Spider(): url = 'https://www.douyu.com/' def __fetch_content(self): r = request.urlopen(Spider.url) htmls = r.read() buff = BytesIO(htmls) f = gzip.GzipFile(fileobj=buff) htmls = f.read().decode('utf-8') # 入口方法 def go(self): self.__fetch_content() spider = Spider() spider.go()
修改之后解碼正常