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

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