在看《Dive Into Python》有一章是对XML的处理,其中写着
import sys
sys.setdefaultencoding('iso-8859-1')
而我使用urlopen写一个采集小程序时,遇上了一个编码问题。以抓取百度首页为例:
sock = urllib.urlopen("http://www.baidu.com/")
htmlSource = sock.read()
sock.close()
当打印htmlSource时,会发现出现乱码的情况了,原因是百度默认的编码是gb2312,而python默认的编码格式为ascii(可通过打印sys.getdefaultencoding() 显示出来)
为什么import sys后,然后使用sys.不会自动提示显示出setdefaultencoding呢?之后搜索了一下:
python的初始化脚本site.py会把sys模块的setdefaultencoding方法删除,python在初始化完毕之后,禁止用户改变默认编码。
以上内容引用至【python改变默认编码】
还有就是在抓取到页面后,需要对页面进行一个解码动作(decode),完整的demo代码将会如下所示:
1: #coding:utf-8 2: import urllib 3: import sys 4: 5: reload(sys) 6: 7: sys.setdefaultencoding('utf-8') 8: 9: print sys.getdefaultencoding() 10: 11: sock = urllib.urlopen("http://www.baidu.com/") 12: htmlSource = sock.read().decode('GBK') 13: sock.close() 14: 15: print htmlSource