在web操作领域,为了减轻响应数据的体积和保证数据完整性的考虑,可以在浏览器允许的情况下,将数据压缩返回,压缩操作方式目前一般支持主流的两重操作方式[Accept-Encoding:gzip, deflate]
不同的两种压缩方式,都可以直接通过Python内置模块进行操作处理
(1) gzip数据处理
服务器返回gzip数据时,下列爬虫程序就会出现问题
# coding:utf-8
import urllib2
url = “[http://www.baidu.com](http://www.baidu.com/)”
response = urllib2.urlopen(url)
print response.read()
打印展示的数据如下
通过数据的抓包分析,可以看到返回的数据是经过gzip压缩操作的,那么在得到响应数据时,我们要进行解压缩操作
解压缩gzip数据,主要使用到了python2中的gzip模块,操作过程如下
from StringIO import StringIO
def un_gzip(data):
‘’’data是服务器响应的压缩过的gzip数据’’’
buff = StringIO(data)
f = gzip.GzipFile(fileobj=buff)
return f.read()
将上述得到的response.read()数据,交给我们定义的un_gzip函数进行处理,就可以得到正确的数据了
(2) deflate压缩数据
和gzip压缩数据一样,deflate格式的压缩数据也是需要进行解压操作才能得到正确数据的,操作方式和gzip类似,使用Python2中的zlib模块
定义如下函数进行操作
def un_zip(data):
‘’’使用deflate压缩格式返回的响应数据处理函数’’’
try:
return zlib.decompress(data, -zlib.MAX_WBITS)
excpet:
return zlib.decompress(data)
如果服务器返回的是类似这样格式的数据,直接通过un_zip函数进行解压操作即可
小结:服务器操作过程中,由于近代浏览器对于数据操作的功能日益加强,所以可以直接操作压缩后的数据,数据经过压缩后的传输能更加友好的保证数据传输质量,所以对于特殊的压缩数据格式的处理也是爬虫需要掌握的技能之一
点击查看更多内容
为 TA 点赞
评论
共同学习,写下你的评论
评论加载中...
作者其他优质文章
正在加载中
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦