问题:
初学Python开发,今天拿简书小试了一下网络爬虫强大的Requests库:
import requests
r = requests.get('http://www.jianshu.com/')
print(r.status_code)
print(r.headers['content-type'])
print(r.text)
在Windows 10 的命令行中执行,没想到结果居然报错:
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)居然可以正常执行。
到baidu去google了一下,原来是由于本地系统是Windows中的cmd,默认codepage是CP936,即GBK的编码,所以需要将接收数据先编码为GBK,然后再在cmd中显示出来,然后由于r.text中包含一些GBK中无法显示的字符,导致此时提示“’gbk’ codec can’t encode”的错误的。最大的可能就是接收数据中Unicode类型的字符中,包含了一些无法转换为GBK编码的一些字符。
在对unicode字符编码时,添加ignore参数,忽略无法编码的字符,这样就可以正常编码为GBK格式,正确输出了。
import requests
r = requests.get('http://www.jianshu.com/')
print(r.status_code)
print(r.headers['content-type'])
print(r.text.encode('gbk','ignore'))
或者将其转换为GBK编码的超集GB18030 (即,GBK是GB18030的子集):
print(r.text.encode('gb18030'))
看来还是在windows下面编写python脚本,编码问题很严重。