完美解决python3在使用urllib库的中文乱码问题!

最近刚开始入坑python爬虫,本来想尝试做个最简单的网页抓取的结果却遇到了编码的问题,在寻找了很多资料后终于完美解决,本人使用的是windows7系统,所以使用非windows系统的可以不必理会,话不多少,先上代码。

 

from urllib import request
url='http://www.douban.com'
response=request.urlopen(url).read().decode()
print(response)

很简单的代码,主要是抓取豆瓣的首页然后返回出来,但是出现了下面的报错信息:

完美解决python3在使用urllib库的中文乱码问题!_第1张图片

大概意思就是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)

到这里肯定很多朋友都认为完全可以了,我也是这么认为的,但是还是太天真了,系统是可以正常运行,但是请看下图:

完美解决python3在使用urllib库的中文乱码问题!_第2张图片

获取到的数据中的中文还是出现了乱码!

原因:这是因为我们是在cmd中输出的,当我们在cmd中输出还是中文乱码,这是cmd的锅,cmd不能很好地兼容utf8,而IDLE就可以,甚至在IDLE下运行,连“改变标准输出的默认编码”都不用,因为它默认就是utf8。如果一定要在cmd下运行,那就改一下编码,比如我换成“gb18030”,就能正常显示了:
sys.stdout = io.TextIOWrapper(sys.stdout.buffer,encoding='gb18030') #改变标准输出的默认编码 

你可能感兴趣的:(python爬坑)