专栏首页技术向python3使用gzip压缩与解压缩

python3使用gzip压缩与解压缩

本文由腾讯云+社区自动同步,原文地址 https://stackoverflow.club/article/python-gzip/

背景

gzip是网页文件在传输中使用的一种压缩方式,但是在以往的爬虫程序中我们往往忽略这个选项,只请求没有压缩的页面。

这两天要使用百度的统计api,发现需要使用python对gazip进行压缩与解压缩,就简单探索下用法。这些函数可以用在爬虫项目中。

python3和python2处理gzip的方式有些不同,主要是由于字符串的差异

python3 代码

解压gzip

import gzip 
def gzdecode(data):
    return gzip.decompress(data).decode('utf8')

压缩gzip

import gzip 
def gzencode(data):
    if type(data) == str:
        data = bytes(data, 'utf8') 
    s_out = gzip.compress(data)
    return s_out

python2 代码

python2的代码没有测试,直接从老代码copy的。

这些代码在python3中会报错ModuleNotFoundError: No module named 'cStringIO', 原因是:

从Python 3.0开始,StringIO和cStringIO模块已经取消。通过import io模块代替,分别使用io.String或io.BytesIO处理文本和数据。 解压gzip

import gzip
import StringIO
def gzdecode(data):
    f = StringIO(data)
    gziper = gzip.GzipFile(fileobj=f, compresslevel=9)
    data2 = gziper.read()  # 读取解压缩后数据
    gziper.close()
    return data2

压缩gzip

import gzip
import StringIO
def gzencode(data):
    f = StringIO.StringIO()
    gziper = gzip.GzipFile(fileobj=f, mode='wb', compresslevel=9, )
    gziper.write(data)  # 压缩后数据
    gziper.close()
    return f.getvalue()

requests示例

既然可以用gzip了,那么就测试下效果,这里我们用gzip格式请求百度首页。

requests可以自动帮我们处理gzip,这里我们请求原始数据,自己解压

import gzip
import requests
ret = requests.get('https://www.baidu.com', stream=True)
ret_gzip = ret.raw.read()
print(gzip.decompress(ret_gzip).decode('utf8'))

TODO:

  1. 我们不知道ret.raw中是不是gzip压缩,需要加判断
  2. 目前还不太清楚为什么已经用了requests, 还要自己处理gzip. 百度统计api python2 github

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • mpc5748g sdhc调试

    本文由腾讯云+社区自动同步,原文地址 https://stackoverflow.club/debug-mpc5748g-devkit-sdhc-module/

    羽翰尘
  • tensorflow lstm原理与代码从头构建

    本文由腾讯云+社区自动同步,原文地址 https://stackoverflow.club/article/construct_lstm_from_nothin...

    羽翰尘
  • 部署itchatmp(基于tornado)到apache2;

    本文由腾讯云+社区自动同步,原文地址 http://blogtest.stackoverflow.club/115/

    羽翰尘
  • 「简明性能优化」双端开启Gzip指南

    在 http/1.0 协议中关于服务端发送的数据可以配置一个 Content-Encoding 字段,这个字段用于说明数据的压缩方法

    前端劝退师
  • Vue Cli3 开启gzip打包及后台nginx配置

    增加了以上选项是为了让vue build 输出gzip文件,如果要站点生效,还需要配置nginx增加以下配置:

    飞奔去旅行
  • 008.Nginx静态资源

    Nginx作为静态资源Web服务器部署配置, 传输非常高效, 常常用于静态资源处理,请求以及动静分离。通常非服务器动态运行生成的文件属于静态资源。

    木二
  • Nginx Gzip 压缩

    不知不觉 nginx主题的文章写了60+篇,有最早的也有最近的,有些是记录安装配置,有些是记录问题解决方法,内容质量有深也有浅参差不齐,随着技术迭代有些文章已经...

    用户1560186
  • Nginx gzip参数详解及常见问题

    Nginx实现资源压缩的原理是通过ngx_http_gzip_module模块拦截请求,并对需要做gzip的类型做gzip,ngx_http_gzip_modu...

    lollipop72
  • vue加载优化(全)

    程序员不务正业
  • Nginx演练(3)配置内容压缩

    比如访问“www.jd.com",一个完整页面的访问,往往会经过很多次的HTTP请求共同完成,这中间会涉及到浏览器并发数。具体片段如图

    py3study

扫码关注云+社区

领取腾讯云代金券