抓取的網(wǎng)頁內(nèi)容是gb2312,轉(zhuǎn)換為utf-8

有的網(wǎng)頁是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可以解碼繁體字以及日文假文等,解碼更強(qiáng)
            if encoding.lower()=='gb2312':
                encoding = 'gbk'
            new_body = response.body.decode(encoding)
            #替換原來的body內(nèi)容
            response = response.replace(body=new_body)

        return response

另外關(guān)于gb2312和gbk解碼
問題:UnicodeDecodeError: 'gb2312' codec can't decode bytes in position 2-3: illegal multibyte sequence
原因:Python在做將普通字符串轉(zhuǎn)換為unicode對象時,
例如:u_string = unicode(string , "gb2312"),如果你的字符串string中有諸如某些繁體字,例如"河滘小學(xué)"
中的滘,那么gb2312作為簡體中文編碼是不能進(jìn)行解析的,必須使用國標(biāo)擴(kuò)展碼gbk,gbk支持繁體中文和日文假文

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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容