盤點(diǎn)3種Python爬蟲 中文亂碼 的處理方法

給大家祭出網(wǎng)絡(luò)爬蟲過程中三種中文亂碼的處理方案,希望對(duì)大家的學(xué)習(xí)有所幫助。

前言

????前幾天有個(gè)粉絲在Python交流群里問了一道關(guān)于使用Python網(wǎng)絡(luò)爬蟲過程中中文亂碼的問題,如下圖所示。


看上去確實(shí)頭大,對(duì)于爬蟲初學(xué)者來說,這個(gè)亂碼擺在自己面前,猶如攔路虎一般難頂。不過別慌,快快在這里給大家整理了三種方法,專門用于針對(duì)中文亂碼的,希望大家在后面再次遇到中文亂碼的問題,在此處可以得到靈感!

一、思路

????其實(shí)解決問題的關(guān)鍵點(diǎn)就是在于一點(diǎn),就是將亂碼的部分進(jìn)行處理,而處理的方案主要可以從兩個(gè)方面進(jìn)行出發(fā)。其一是針對(duì)整體網(wǎng)頁進(jìn)行提前編碼,其二是針對(duì)局部具體中文亂碼的部分進(jìn)行編碼處理。這里例舉3種方法,肯定還有其他的方法的,也歡迎大家在評(píng)論區(qū)諫言。

二、分析

????其實(shí)關(guān)于中文亂碼的表現(xiàn)形式有很多,但是常見的兩種如下:

1、當(dāng)出現(xiàn)網(wǎng)頁編碼為gbk,獲取到的內(nèi)容在控制臺(tái)打印類似如下情況的時(shí)候:

?à?? μ???×à ?ü?ì ?ú·? ?é°? D?????4k±ú??

2、當(dāng)出現(xiàn)網(wǎng)頁編碼為gbk,獲取到的內(nèi)容在控制臺(tái)打印類似如下情況的時(shí)候:

????? ??? ? С? Ψ??

雖然看上去控制臺(tái)輸出正常,沒有報(bào)錯(cuò):

Process finishedwithexitcode0

????但是輸出的中文內(nèi)容,卻不是普通人能看得懂的。

這種情況下的話,就可以通過使用本文給出的三種方法進(jìn)行解決,屢試不爽!

三、具體實(shí)現(xiàn)

1)方法一:將requests.get().text改為requests.get().content


? ? 我們可以看到通過text()方法獲取到的源碼,之后進(jìn)行打印輸出的話,確實(shí)是會(huì)存在亂碼的,如下圖所示。


此時(shí)可以考慮將請(qǐng)求變?yōu)?content,得到的內(nèi)容就是正常的了。

2)方法二:手動(dòng)指定網(wǎng)頁編碼

# 手動(dòng)設(shè)定響應(yīng)數(shù)據(jù)的編碼格式response.encoding?=?response.apparent_encoding


這個(gè)方法稍微復(fù)雜一些,但是比較好理解,對(duì)于初學(xué)者來說,還是比較好接受的。

????如果覺得上面的方法很難記住,或者你可以嘗試直接指定gbk編碼也可以進(jìn)行處理,如下圖所示:

上面介紹的兩種方法都是針對(duì)網(wǎng)頁進(jìn)行整體編碼,效果顯著,接下來的第三種方法就是針對(duì)中文局部亂碼部分使用通用編碼方法進(jìn)行處理。

3)方法三:使用通用的編碼方法

img_name.encode('iso-8859-1').decode('gbk')

使用通用的編碼方法,對(duì)中文出現(xiàn)亂碼的地方進(jìn)行編碼設(shè)定即可。還是當(dāng)前的這個(gè)例子,針對(duì)img_name進(jìn)行編碼設(shè)定,指定編碼并進(jìn)行解碼,如下圖所示。


如此一來,中文亂碼的問題就迎刃而解了。

四、總結(jié)

針對(duì)Python網(wǎng)絡(luò)爬蟲過程中的中文亂碼問題,給出了3種亂碼解決方法,雖然文中例舉了3種方法,但是快快相信肯定還有其他的方法的,也歡迎大家在評(píng)論區(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)容