99999久久久久久亚洲,欧美人与禽猛交狂配,高清日韩av在线影院,一个人在线高清免费观看,啦啦啦在线视频免费观看www

熱線電話:13121318867

登錄
首頁精彩閱讀盤點(diǎn)3種Python網(wǎng)絡(luò)爬蟲過程中的中文亂碼的處理方法
盤點(diǎn)3種Python網(wǎng)絡(luò)爬蟲過程中的中文亂碼的處理方法
2021-10-13
收藏

來源:Python爬蟲與數(shù)據(jù)挖掘

作者: Python進(jìn)階者

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

前言

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

盤點(diǎn)3種Python<a href='/map/wangluopachong/' style='color:#000;font-size:inherit;'>網(wǎng)絡(luò)爬蟲</a>過程中的中文亂碼的處理方法
盤點(diǎn)3種Python<a href='/map/wangluopachong/' style='color:#000;font-size:inherit;'>網(wǎng)絡(luò)爬蟲</a>過程中的中文亂碼的處理方法
盤點(diǎn)3種Python<a href='/map/wangluopachong/' style='color:#000;font-size:inherit;'>網(wǎng)絡(luò)爬蟲</a>過程中的中文亂碼的處理方法

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

一、思路

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

二、分析

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

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

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

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

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

雖然看上去控制臺輸出正常,沒有報錯:

Process finished with exit code 0

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

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

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

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

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

盤點(diǎn)3種Python<a href='/map/wangluopachong/' style='color:#000;font-size:inherit;'>網(wǎng)絡(luò)爬蟲</a>過程中的中文亂碼的處理方法

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

盤點(diǎn)3種Python<a href='/map/wangluopachong/' style='color:#000;font-size:inherit;'>網(wǎng)絡(luò)爬蟲</a>過程中的中文亂碼的處理方法

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

# 手動設(shè)定響應(yīng)數(shù)據(jù)的編碼格式 response.encoding = response.apparent_encoding
盤點(diǎn)3種Python<a href='/map/wangluopachong/' style='color:#000;font-size:inherit;'>網(wǎng)絡(luò)爬蟲</a>過程中的中文亂碼的處理方法

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

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

盤點(diǎn)3種Python<a href='/map/wangluopachong/' style='color:#000;font-size:inherit;'>網(wǎng)絡(luò)爬蟲</a>過程中的中文亂碼的處理方法

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

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

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

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

盤點(diǎn)3種Python<a href='/map/wangluopachong/' style='color:#000;font-size:inherit;'>網(wǎng)絡(luò)爬蟲</a>過程中的中文亂碼的處理方法

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

四、總結(jié)

我是Python進(jìn)階者。本文基于粉絲提問,針對Python網(wǎng)絡(luò)爬蟲過程中的中文亂碼問題,給出了3種亂碼解決方法,順利幫助粉絲解決了問題。雖然文中例舉了3種方法,但是小編相信肯定還有其他的方法的,也歡迎大家在評論區(qū)諫言。

盤點(diǎn)3種Python<a href='/map/wangluopachong/' style='color:#000;font-size:inherit;'>網(wǎng)絡(luò)爬蟲</a>過程中的中文亂碼的處理方法

小伙伴們,快快用實(shí)踐一下吧!

數(shù)據(jù)分析咨詢請掃描二維碼

若不方便掃碼,搜微信號:CDAshujufenxi

數(shù)據(jù)分析師資訊
更多

OK
客服在線
立即咨詢
客服在線
立即咨詢
') } function initGt() { var handler = function (captchaObj) { captchaObj.appendTo('#captcha'); captchaObj.onReady(function () { $("#wait").hide(); }).onSuccess(function(){ $('.getcheckcode').removeClass('dis'); $('.getcheckcode').trigger('click'); }); window.captchaObj = captchaObj; }; $('#captcha').show(); $.ajax({ url: "/login/gtstart?t=" + (new Date()).getTime(), // 加隨機(jī)數(shù)防止緩存 type: "get", dataType: "json", success: function (data) { $('#text').hide(); $('#wait').show(); // 調(diào)用 initGeetest 進(jìn)行初始化 // 參數(shù)1:配置參數(shù) // 參數(shù)2:回調(diào),回調(diào)的第一個參數(shù)驗證碼對象,之后可以使用它調(diào)用相應(yīng)的接口 initGeetest({ // 以下 4 個配置參數(shù)為必須,不能缺少 gt: data.gt, challenge: data.challenge, offline: !data.success, // 表示用戶后臺檢測極驗服務(wù)器是否宕機(jī) new_captcha: data.new_captcha, // 用于宕機(jī)時表示是新驗證碼的宕機(jī) product: "float", // 產(chǎn)品形式,包括:float,popup width: "280px", https: true // 更多配置參數(shù)說明請參見:http://docs.geetest.com/install/client/web-front/ }, handler); } }); } function codeCutdown() { if(_wait == 0){ //倒計時完成 $(".getcheckcode").removeClass('dis').html("重新獲取"); }else{ $(".getcheckcode").addClass('dis').html("重新獲取("+_wait+"s)"); _wait--; setTimeout(function () { codeCutdown(); },1000); } } function inputValidate(ele,telInput) { var oInput = ele; var inputVal = oInput.val(); var oType = ele.attr('data-type'); var oEtag = $('#etag').val(); var oErr = oInput.closest('.form_box').next('.err_txt'); var empTxt = '請輸入'+oInput.attr('placeholder')+'!'; var errTxt = '請輸入正確的'+oInput.attr('placeholder')+'!'; var pattern; if(inputVal==""){ if(!telInput){ errFun(oErr,empTxt); } return false; }else { switch (oType){ case 'login_mobile': pattern = /^1[3456789]\d{9}$/; if(inputVal.length==11) { $.ajax({ url: '/login/checkmobile', type: "post", dataType: "json", data: { mobile: inputVal, etag: oEtag, page_ur: window.location.href, page_referer: document.referrer }, success: function (data) { } }); } break; case 'login_yzm': pattern = /^\d{6}$/; break; } if(oType=='login_mobile'){ } if(!!validateFun(pattern,inputVal)){ errFun(oErr,'') if(telInput){ $('.getcheckcode').removeClass('dis'); } }else { if(!telInput) { errFun(oErr, errTxt); }else { $('.getcheckcode').addClass('dis'); } return false; } } return true; } function errFun(obj,msg) { obj.html(msg); if(msg==''){ $('.login_submit').removeClass('dis'); }else { $('.login_submit').addClass('dis'); } } function validateFun(pat,val) { return pat.test(val); }