前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >python3使用gzip压缩与解压缩

python3使用gzip压缩与解压缩

作者头像
羽翰尘
修改2019-11-26 16:51:46
8.3K0
修改2019-11-26 16:51:46
举报
文章被收录于专栏:技术向技术向

本文由腾讯云+社区自动同步,原文地址 https://cloud.tencent.com/developer/article/1540946

背景

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

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

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

python3 代码

解压gzip

代码语言:txt
复制
import gzip 
def gzdecode(data):
    return gzip.decompress(data).decode('utf8')

压缩gzip

代码语言:txt
复制
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

代码语言:txt
复制
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

代码语言:txt
复制
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,这里我们请求原始数据,自己解压

代码语言:txt
复制
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
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019-04-18,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 背景
  • python3 代码
    • 解压gzip
      • 压缩gzip
      • python2 代码
        • 压缩gzip
        • requests示例
        相关产品与服务
        文件存储
        文件存储(Cloud File Storage,CFS)为您提供安全可靠、可扩展的共享文件存储服务。文件存储可与腾讯云服务器、容器服务、批量计算等服务搭配使用,为多个计算节点提供容量和性能可弹性扩展的高性能共享存储。腾讯云文件存储的管理界面简单、易使用,可实现对现有应用的无缝集成;按实际用量付费,为您节约成本,简化 IT 运维工作。
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档