美文网首页大牧夜话——爬虫篇
爬虫正传-江湖路远-0105-谁的刀快谁就有理

爬虫正传-江湖路远-0105-谁的刀快谁就有理

作者: 大牧莫邪 | 来源:发表于2018-05-14 23:47 被阅读0次

在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函数进行解压操作即可

**小结:服务器操作过程中,由于近代浏览器对于数据操作的功能日益加强,所以可以直接操作压缩后的数据,数据经过压缩后的传输能更加友好的保证数据传输质量,所以对于特殊的压缩数据格式的处理也是爬虫需要掌握的技能之一
**

相关文章

  • 爬虫正传-江湖路远-0105-谁的刀快谁就有理

    在web操作领域,为了减轻响应数据的体积和保证数据完整性的考虑,可以在浏览器允许的情况下,将数据压缩返回,压缩操作...

  • 爬虫正传-江湖路远-0100

    urllib2底层数据采集方式 1. 亚当和夏娃的故事 据传说,亚当是上帝创世第六天,根据自己的模样造出的第一个人...

  • 爬虫正传-江湖路远-0101-刀未佩妥,出门已是江湖

    1.1. 刀未佩妥,出门已是江湖——第一个爬虫程序 创建自己的爬虫工作目录,我个人工作目录位置: /home/da...

  • 爬虫正传-江湖路远-0103-入乡随俗

    尽管已经可以行侠仗义,但是初入江湖的少侠依然少了很多江湖经验,完全不顾及别人的饭碗,疯狂的数据采集造成的压力引起了...

  • 人在世上

    人在世上, 何处不是江湖? 江湖路远, 谁可相伴相依? 世道无常, 瞬间阴阳相隔; 人情泠暖, 转眼劳燕分飞。 夏...

  • 风·卫风·河广

    谁谓河广?一苇杭之。谁谓宋远?跂予望之。 谁谓河广?曾不容刀。谁谓宋远?曾不崇朝

  • 河广

    谁谓河广? 一苇杭之。 谁谓宋远? 跂予望之。 谁谓河广? 曾不容刀。 谁谓宋远? 曾不崇朝。

  • 国风 卫风——河广

    谁谓河广?一苇杭之。 谁谓宋远?跂予望之。 谁谓河广?曾不容刀。 谁谓宋远?曾不崇朝。

  • [多一点教育]河广

    谁谓河广?一苇杭之。谁谓宋远?跂予望之。 谁谓河广?曾不容刀。谁谓宋远?曾不崇朝。

  • [多一点]河广

    谁谓河广?一苇杭之。谁谓宋远?跂予望之。 谁谓河广?曾不容刀。谁谓宋远?曾不崇朝。

网友评论

    本文标题:爬虫正传-江湖路远-0105-谁的刀快谁就有理

    本文链接:https://www.haomeiwen.com/subject/tbmsdftx.html