在看《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在初始化完毕之后,禁止用户改变默认编码。
以上内容引用至【】
还有就是在抓取到页面后,需要对页面进行一个解码动作(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