今日在用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