Python3爬蟲之中文亂碼問題分析與解決方法

2021-09-24 11:52:46 字數 2938 閱讀 5761

前言:

今天簡單爬取乙個網頁的源**時,發現出現了亂碼

python**:

import requests

req = requests.get(

"")req_text = req.text

print

(req_text)

部分截圖:

分析:出現這樣的情況是什麼原因呢?

(1)我們先來測試一下python3的預設編碼是什麼

import sys

print

('目前系統的編碼為:'

,sys.getdefaultencoding())

name1=

"驚鴻一面"

name2=name1.encode(

"utf-8"

)#str通過(encode)轉為bytes

print

("name1的型別:"

,type

(name1)

)print

("name2的型別"

,type

(name2)

)print

(name2)

執行結果:

(2)知識點:

(3)原因總結:

python3的預設編碼是utf-8,所有的資料他都會以utf-8進行編碼(encode)。因此,python3將目標**的原始碼爬取之後進行utf-8編碼,但我們所爬取的目標**是gb2312編碼,與python3的預設編碼不同,因而造成亂碼

解決方案:

使用通用的編碼格式

(4)注:

(5)我們以幾種常見的編碼格式進行encode測試

import requests

req= requests.get(

"")req_text1=req.text.encode(

"utf-8"

)req_text2=req.text.encode(

"gb2312"

)req_text3=req.text.encode(

"gb18030"

)print

(req_text1)

#成功編碼成bytes

print

(req_text2)

#unicodeencodeerror: 'gb2312' codec can't encode character '\xb3' in position 293: illegal multibyte sequence

print

(req_text3)

#成功編碼成bytes

(6)接著上面又做了decode測試,遵行編碼使用準則,但是還是亂碼!!

import requests

req= requests.get(

"")req_text1=req.text.encode(

"utf-8"

).decode(

"utf-8"

)req_text2=req.text.encode(

"utf-8"

).decode(

"gb2312"

)req_text3=req.text.encode(

"utf-8"

).decode(

"gb18030"

)req_text4=req.text.encode(

"gb18030"

).decode(

"utf-8"

)req_text5=req.text.encode(

"gb18030"

).decode(

"gb2312"

)req_text6=req.text.encode(

"gb18030"

).decode(

"gb18030"

)print

(req_text1)

#成功但是亂碼

print

(req_text2)

#unicodedecodeerror: 'gb2312' codec can't decode byte 0xc3 in position 297: illegal multibyte sequence

print

(req_text3)

#成功但是亂碼

print

(req_text4)

#unicodedecodeerror: 'utf-8' codec can't decode byte 0x81 in position 293: invalid start byte

print

(req_text5)

#unicodedecodeerror: 'gb2312' codec can't decode byte 0x81 in position 293: illegal multibyte sequence

print

(req_text6)

#成功但是亂碼

解決方法:

那到底怎樣才能解決呢???請看如下**:

import requests

req= requests.get(

"")req_text=req.text.encode(

"latin1"

).decode(

"gbk"

)print

(req_text)

這裡進行encode時使用了latin1。

Python網頁爬蟲之中文亂碼

python是個好工具,但是也有其固有的一些缺點。最近在學習網頁爬蟲時就遇到了這樣一種問題,中文 爬取下來的內容往往中文顯示亂碼。看過我之前部落格的同學可能知道,之前爬取的乙個學校網頁就出現了這個問題,但是當時並沒有解決,這著實成了我乙個心病。這不,剛剛一解決就將這個方法公布與眾,大家一同分享。co...

Python網頁爬蟲之中文亂碼

python是個好工具,但是也有其固有的一些缺點。最近在學習網頁爬蟲時就遇到了這樣一種問題,中文 爬取下來的內容往往中文顯示亂碼。看過我之前部落格的同學可能知道,之前爬取的乙個學校網頁就出現了這個問題,但是當時並沒有解決,這著實成了我乙個心病。這不,剛剛一解決就將這個方法公布與眾,大家一同分享。co...

Python入門之中文亂碼

python入門編碼 python 檔案中如果未指定編碼,有中文 時候,在執行過程會出現報錯 file test.py line 2 syntaxerror non ascii character xe4 in file test.py on line 2,but no encoding decla...