中文亂碼的解決方法
爬蟲最常見(jiàn)的問(wèn)題是返回的數(shù)據(jù)中文亂碼,對(duì)于爬蟲小白來(lái)說(shuō)這樣的問(wèn)題幾乎不可避免,不過(guò)別擔(dān)心,我這里有好幾種解決中文亂碼的方法,總有一款適合你。
方法一:
采用我這里代碼里的這種方法,先在代碼頭設(shè)置編碼方式為 " UTF-8" ,UTF-8 是保存中文字符的通用代碼。然后,添加如下代碼,一般都能解決中文亂碼問(wèn)題。
#如果目標(biāo)網(wǎng)頁(yè)編碼與本地不一致,修改本地默認(rèn)編碼方式(防止輸出中文亂碼)
if sys.getdefaultencoding() != resp.encoding: #resp.encoing用于查詢網(wǎng)頁(yè)所采用的編碼格式
reload(sys)
sys.setdefaultencoding(resp.encoding) #設(shè)置本地編碼格式與網(wǎng)頁(yè)的編碼格式相同
?方法二:
這里先補(bǔ)充幾個(gè)知識(shí)點(diǎn):
?
- decode -----把當(dāng)前字符解碼成Unicode編碼
- encode-----把Unicode編碼格式的字符編碼成其他格式的編碼
- Python默認(rèn)使用Unicode字符集,做編碼轉(zhuǎn)換時(shí),要把Unicode作為中間編碼,先decode(解碼)成Unicode編碼,再encode(編碼)成其他編碼。
- 非Unicode編碼不能直接encode成其他編碼,否則會(huì)報(bào)錯(cuò)。
- 用requests模塊獲得response對(duì)象,已經(jīng)預(yù)先對(duì)于網(wǎng)頁(yè)的編碼格式(通過(guò)網(wǎng)頁(yè)的Head頭里的charset =XXX)做出判斷,用resp.text得到的內(nèi)容是解碼之后的內(nèi)容,不需要再次解碼。
- 而用resp.content 得到的內(nèi)容是未解碼的二進(jìn)制字節(jié)流,要先decode(解碼),再encode(編碼)
#text輸出的數(shù)據(jù)由request自動(dòng)解碼(把bytes型數(shù)據(jù)變成Unicode字符),只需要把Unicode編碼成utf-8輸出就行
respText1= resp.text.encode('utf-8','ignore')
#content的內(nèi)容需要手動(dòng)解碼成unicode再編碼成utf-8等其他編碼
respText2 = resp.content.decode('utf-8','ignore').encode('GBK','ignore')
?
方法三:
如果是在Pycharm中編程可以把圖中圈起來(lái)的地方全部改成UTF-8,簡(jiǎn)單粗暴。
如果上面三種方法都試過(guò)了還是不行,可能就是網(wǎng)上說(shuō)的網(wǎng)頁(yè)下載時(shí)有壓縮的緣故了,具體的解決方法參考以下鏈接:
https://blog.csdn.net/Dream_Hongyu/article/details/50478265
?
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號(hào)聯(lián)系: 360901061
您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對(duì)您有幫助就好】元
