python爬虫中文输出问题以及不即时输出问题
2017-12-15 本文已影响0人
丶不见长安丶
使用sublime运行爬虫程序时,会有报错UnicodeEncodeError: 'gbk' codec can't encode character '\xbb' in position 0: illegal multibyte sequence的情况,因为python安装在windows平台上,cmd的默认编码为GBK,所以在cmd中显示中文时会经常提示gbk编码错误。
网上搜索一下,其中一种解决方案是:
import io
import sys
sys.stdout = io.TextIOWrapper(sys.stdout.buffer,encoding='utf8')#改变输出字符集
这样修改后问题是解决了,但是还会有个坑。爬虫程序在处理网页请求时需要时间,你如果想要判断程序是否在运行,可能会在不同的位置加打印语句来判断。这个时候因为前面的改变输出字符集操作,会导致整段程序全部跑完才会输出,而不是实时输出print语句,例如:
1按时常理来说应该是先输出"你好",然后输出"你好1",等待10s后输出"你好2"
但是实际运行时,会卡住一会(延迟10s)然后同时输出"你好","你好1","你好2"
解决方法1:通过python自带的idle运行程序,idle默认支持中文输出,但是要去掉sys.stdout = io.TextIOWrapper(sys.stdout.buffer,encoding='utf8'),不然会报错。
解决方法2:在要打印的地方加上sys.stdout.flush(),未验证