'utf-8' codec can't decode byte 0x8b in position 1: invalid start byte


問題描述:在使用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()

修改之后解碼正常


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM