python urllib爬取网页编码问题

来源:互联网 发布:无锡亚信数据有限公司 编辑:程序博客网 时间:2024/05/16 15:16

利用python urllib库爬取网页,有时获得的网页打印或写文件遇到编码问题,找了许久终于知道为什么了。

首先利用urlopen()函数获取网页对象,再利用info()函数打印网页的相关信息,确定网页的编码及是否压缩。

import urllib.requestfp = urllib.request.urlopen('http://www.sina.com')mybytes = fp.read()text = mybytes.decode('utf8')print(text)
报错


显示编码错误,刚开始,傻傻地试各种编码,utf-8,gbk,gb2312,都不行,心里堵得慌,是在玩我吗?

so,开始怀疑是bug,但是有的网页又不会出错,这就奇怪了,最后google找到了一个解释,说是返回的网页数据是压缩格式,恍然大悟,先打印网页信息,看一眼


gzip,网页是压缩后的,所以要先解压,上代码

import urllib.requestimport zlibfp = urllib.request.urlopen('http://www.sina.com')mybytes = fp.read()decompressed_data = zlib.decompress(mybytes ,16+zlib.MAX_WBITS)text = decompressed_data.decode('utf8')print(text)print(fp.info())
结果


Google问题原版

http://stackoverflow.com/questions/3746993/change-python-byte-type-to-string

http://stackoverflow.com/questions/3703276/how-to-tell-if-a-file-is-gzip-compressed/3703300#3703300

0 0
原创粉丝点击