爬蟲之編碼神坑

編碼

  我相信大多數(shù)做過爬蟲項(xiàng)目的人,都會(huì)遇到過編碼問題,首先我先提一個(gè)問題,啥是編碼??

編碼底層的東西我也不懂,就不細(xì)說了。簡(jiǎn)單的來說:為了讓電腦能識(shí)別世界上所有語言編寫的代碼,為每一個(gè)文字編寫了唯一的編號(hào)。


utf-8對(duì)應(yīng)編碼

編碼種類

    編碼的種類非常多像是ASCII,UTF-8,Unicode等等,數(shù)不勝數(shù),很無奈,世界上的語言太多了

怎么解決編碼問題

  在python這樣包容性強(qiáng)大的第三方庫(kù)里沒有解決不了的事情。

為了一勞永逸解決編碼的問題,chardet這個(gè)第三方庫(kù)正好就派上了用場(chǎng)。用它來檢測(cè)編碼,簡(jiǎn)單易用。

使用chardet

一勞永逸的辦法

r=requests.get(url)
print(r.content.decode(chardet.detect(r.content)['encoding']))

當(dāng)我們拿到一個(gè)bytes時(shí),就可以對(duì)其檢測(cè)編碼。用chardet檢測(cè)編碼,只需要一行代碼:

chardet.detect(b'Hello, world!')
{'encoding': 'ascii', 'confidence': 1.0, 'language': ''}

檢測(cè)出的編碼是ascii,注意到還有個(gè)confidence字段,表示檢測(cè)的概率是1.0(即100%)。

我們來試試檢測(cè)GBK編碼的中文:

data = '離離原上草,一歲一枯榮'.encode('gbk')
chardet.detect(data)
{'encoding': 'GB2312', 'confidence': 0.7407407407407407, 'language': 'Chinese'}

檢測(cè)的編碼是GB2312,注意到GBK是GB2312的超集,兩者是同一種編碼,檢測(cè)正確的概率是74%,language字段指出的語言是'Chinese'。

對(duì)UTF-8編碼進(jìn)行檢測(cè):

data = '離離原上草,一歲一枯榮'.encode('utf-8')
chardet.detect(data)
{'encoding': 'utf-8', 'confidence': 0.99, 'language': ''}

我們?cè)僭囋噷?duì)日文進(jìn)行檢測(cè):

data = '最新の主要ニュース'.encode('euc-jp')
chardet.detect(data)
{'encoding': 'EUC-JP', 'confidence': 0.99, 'language': 'Japanese'}

可見,用chardet檢測(cè)編碼,使用簡(jiǎn)單。獲取到編碼后,再轉(zhuǎn)換為str,就可以方便后續(xù)處理。

chardet支持檢測(cè)的編碼列表請(qǐng)參考官方文檔Supported encodings。

decode和encode

我經(jīng)常把這兩個(gè)函數(shù)搞暈,感覺長(zhǎng)的都挺像的,哈哈
請(qǐng)參考以下文章 decode和encode的區(qū)別

text和content

請(qǐng)參考以下文章 text和content的區(qū)別

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

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

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