問題:
初學Python開發(fā)谋右,今天拿簡書小試了一下網(wǎng)絡(luò)爬蟲強大的Requests庫:
import requests
r = requests.get('http://www.reibang.com/')
print(r.status_code)
print(r.headers['content-type'])
print(r.text)
在Windows 10 的命令行中執(zhí)行棺滞,沒想到結(jié)果居然報錯:
200
text/html; charset=utf-8
Traceback (most recent call last):? File "C:/Users/team/spider.py", line 8, inprint r.text
UnicodeEncodeError: 'gbk' codec can't encode character u'\xa9' in position 36179: illegal multibyte sequence
這么簡單的代碼捏顺,還碰到編碼錯誤問題窃判。挪到IDLE去檢查一下,print(r.text)居然可以正常執(zhí)行茫经。
到baidu去google了一下了嚎,原來是由于本地系統(tǒng)是Windows中的cmd,默認codepage是CP936咧七,即GBK的編碼铃辖,所以需要將接收數(shù)據(jù)先編碼為GBK,然后再在cmd中顯示出來猪叙,然后由于r.text中包含一些GBK中無法顯示的字符娇斩,導(dǎo)致此時提示“’gbk’ codec can’t encode”的錯誤的。最大的可能就是接收數(shù)據(jù)中Unicode類型的字符中穴翩,包含了一些無法轉(zhuǎn)換為GBK編碼的一些字符犬第。
在對unicode字符編碼時,添加ignore參數(shù)芒帕,忽略無法編碼的字符歉嗓,這樣就可以正常編碼為GBK格式,正確輸出了背蟆。
import requests
r = requests.get('http://www.reibang.com/')
print(r.status_code)
print(r.headers['content-type'])
print(r.text.encode('gbk','ignore'))
或者將其轉(zhuǎn)換為GBK編碼的超集GB18030 (即鉴分,GBK是GB18030的子集):
print(r.text.encode('gb18030'))
看來還是在windows下面編寫python腳本,編碼問題很嚴重带膀。