Python下载文件时出现乱码的解决方法之一:Content-Encoding: gzip

来源:互联网 发布:mac pro 新建文件夹 编辑:程序博客网 时间:2024/06/03 21:41

之前写过一个简单的爬虫程序,这次想试着再写一个下载固定文件的爬虫程序。

写完之后发现下载的文件,有些是可以正常打开的,而有些是提示了编码错误,用wireshark抓包,过滤出http的包,发现wireshark上显示的数据是没错的。然后又详细看了http数据包的内容。发现有一个"Content-Encoding: gzip"的项,根据之前写爬虫程序时看的教程,大概知道应该是数据被压缩的,所以之前保存的内容是压缩后的数据,导致读取失败。

上网搜索了一下,可以使用gzip库来对数据进行解压缩,代码如下:

req = urllib2.Request(url)try:response = urllib2.urlopen(req)data = response.read()except:returnheaders = response.info()if 'Content-Encoding' in headers and 'gzip' == headers['Content-Encoding']:import gzip, StringIOdata = StringIO.StringIO(data)gz = gzip.GzipFile(fileobj = data)data = gz.read()gz.close()

按照上面解压缩后,在保存为对应格式的文件,就可以正常打开了。不过上面只判断了一种类型。

代码中的StringIO用于在内存缓冲区中读写数据。

在搜索解决方法的时候,发现一篇文章,说到gzip是用来压缩与解压缩文件,而zlib是压缩与解压缩数据的。不过没有深入去看,先留着,说不定以后可以用到。文章链接为:http://www.crifan.com/compress_html_in_urllib2_open_then_decompress_returned_gzip_data_in_python/

0 0
原创粉丝点击