zoukankan      html  css  js  c++  java
  • '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’x1fx8bx08’开头的,说明它是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()

    修改之后解码正常

  • 相关阅读:
    Ext2.0布局类初探
    从DHTML、HTC、XHTML到AJAX
    我常用的一些ASP自定义函数
    Javascript的调试利器:Firebug使用详解
    ODBC的多线程应用
    召唤有丰富IOCP实践经验的同行
    欢迎
    关于.NET安装时的dotNETFXRedist_x86.msm
    所谓设计模式
    VC编程经验汇总(一)
  • 原文地址:https://www.cnblogs.com/syq816/p/12626747.html
Copyright © 2011-2022 走看看