抓取的网页内容是gb2312,转换为utf-8

有的网页是gb2312编码,则需要将response.body判断编码,并解码

    #检查编码
    def check_encoding(self,response):
        import chardet
        #
        #detect传入的是bytes
        # 返回{'confidence': 0.99, 'encoding': 'GB2312'}
        # 'encoding': 'utf-8'
        encoding_info = chardet.detect(response.body)
        encoding = encoding_info.get('encoding')
        #非utf-8则解码
        if encoding != 'utf-8':
            # 如果是gb2312,则用gbk来解码,gbk可以解码繁体字以及日文假文等,解码更强
            if encoding.lower()=='gb2312':
                encoding = 'gbk'
            new_body = response.body.decode(encoding)
            #替换原来的body内容
            response = response.replace(body=new_body)

        return response

另外关于gb2312和gbk解码
问题:UnicodeDecodeError: 'gb2312' codec can't decode bytes in position 2-3: illegal multibyte sequence
原因:Python在做将普通字符串转换为unicode对象时,
例如:u_string = unicode(string , "gb2312"),如果你的字符串string中有诸如某些繁体字,例如"河滘小学"
中的滘,那么gb2312作为简体中文编码是不能进行解析的,必须使用国标扩展码gbk,gbk支持繁体中文和日文假文

解决方法:使用gbk,代替gb2312,例如:u_string = unicode(string , "gbk")

你可能感兴趣的:(抓取的网页内容是gb2312,转换为utf-8)