【python爬蟲】用selenium爬時報錯UnicodeEncodeError: ‘gbk‘ codec can‘t encode character ‘\u2022‘

獨愛Python發表於2020-11-27

今日在用selenium爬取拉勾網資料時,遇到如下錯誤:

UnicodeEncodeError: 'gbk' codec can't encode character '\u2022' in position 131907: illegal multibyte sequence

解決方案:

import io
import sys
sys.stdout = io.TextIOWrapper(sys.stdout.buffer,encoding='utf-8')

查了相關資料發現原因是print()函式自身有限制,不能完全列印所有的unicode字元。

其實print()函式的侷限就是Python預設編碼的侷限,因為系統是win7的,python的預設編碼不是’utf-8’,改一下python的預設編碼成’utf-8’就行了

import io  
import sys 
from urllib import request
sys.stdout = io.TextIOWrapper(sys.stdout.buffer,encoding='utf8') 
#改變標準輸出的預設編碼
url="https://www.baidu.com/"
headers="User-Agent","Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:83.0) Gecko/20100101 Firefox/83.0"
response=requests.get(url,headers=Headers)
print(response)

如果在cmd下執行該指令碼有亂碼,而在IDLE下執行卻很正常。

原因是cmd不能很好地相容utf8,而IDLE就可以,甚至在IDLE下執行,連“改變標準輸出的預設編碼”都不用,因為它預設就是utf8。如果一定要在cmd下執行,那就改一下編碼,比如我換成“gb18030”,就能正常顯示了:

sys.stdout = io.TextIOWrapper(sys.stdout.buffer,encoding='gb18030')  
#改變標準輸出的預設編碼

這裡附上一些常用的和中文有關的編碼的名稱,分別賦值給encoding,就可以看到不同的效果了:

編碼名稱用途
utf8所有語言
gbk簡體中文
gb2312簡體中文
gb18030簡體中文
big5繁體中文
big5hkscs繁體中文

參考連結:https://blog.csdn.net/jim7424994/article/details/22675759

相關文章