最近刚开始入坑python爬虫,本来想尝试做个最简单的网页抓取的结果却遇到了编码的问题,在寻找了很多资料后终于完美解决,本人使用的是windows7系统,所以使用非windows系统的可以不必理会,话不多少,先上代码。
from urllib import request
url='http://www.douban.com'
response=request.urlopen(url).read().decode()
print(response)
很简单的代码,主要是抓取豆瓣的首页然后返回出来,但是出现了下面的报错信息:
大概意思就是gbk和字节无法转化的意思(我猜的),在网上找了很多资料,发现是windows中文系统默认的编码是gbk,而python3默认的却是utf-8,所以产生了上面的错误,所以只需要修改系统默认编码就可以,请看代码:
import sys
import io
from urllib import request
sys.stdout = io.TextIOWrapper(sys.stdout.buffer,encoding='utf-8')
url='http://www.douban.com'
response=request.urlopen(url).read().decode()
print(response)
到这里肯定很多朋友都认为完全可以了,我也是这么认为的,但是还是太天真了,系统是可以正常运行,但是请看下图:
获取到的数据中的中文还是出现了乱码!
原因:这是因为我们是在cmd中输出的,当我们在cmd中输出还是中文乱码,这是cmd的锅,cmd不能很好地兼容utf8,而IDLE就可以,甚至在IDLE下运行,连“改变标准输出的默认编码”都不用,因为它默认就是utf8。如果一定要在cmd下运行,那就改一下编码,比如我换成“gb18030”,就能正常显示了:
sys.stdout = io.TextIOWrapper(sys.stdout.buffer,encoding='gb18030') #改变标准输出的默认编码