python如何实现gzip/deflate支持
发表于:2024-11-11 作者:千家信息网编辑
千家信息网最后更新 2024年11月11日,这篇文章主要介绍python如何实现gzip/deflate支持,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!gzip/deflate支持现在的网页普遍支持gzip压缩,这往往
千家信息网最后更新 2024年11月11日python如何实现gzip/deflate支持
这篇文章主要介绍python如何实现gzip/deflate支持,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!
gzip/deflate支持
现在的网页普遍支持gzip压缩,这往往可以解决大量传输时间,以VeryCD的主页为例,未压缩版本247K,压缩了以后45K,为原来的1/5。这就意味着抓取速度会快5倍。
然而python的urllib/urllib2默认都不支持压缩,要返回压缩格式,必须在request的header里面写明'accept-encoding',然后读取response后更要检查header查看是否有'content-encoding'一项来判断是否需要解码,很繁琐琐碎。如何让urllib2自动支持gzip, defalte呢?
其实可以继承BaseHanlder类,然后build_opener的方式来处理:
import urllib2from gzip import GzipFilefrom StringIO import StringIOclass ContentEncodingProcessor(urllib2.BaseHandler): """A handler to add gzip capabilities to urllib2 requests """ # add headers to requests def http_request(self, req): req.add_header("Accept-Encoding", "gzip, deflate") return req # decode def http_response(self, req, resp): old_resp = resp # gzip if resp.headers.get("content-encoding") == "gzip": gz = GzipFile( fileobj=StringIO(resp.read()), mode="r" ) resp = urllib2.addinfourl(gz, old_resp.headers, old_resp.url, old_resp.code) resp.msg = old_resp.msg # deflate if resp.headers.get("content-encoding") == "deflate": gz = StringIO( deflate(resp.read()) ) resp = urllib2.addinfourl(gz, old_resp.headers, old_resp.url, old_resp.code) # 'class to add info() and resp.msg = old_resp.msg return resp# deflate supportimport zlibdef deflate(data): # zlib only provides the zlib compress format, not the deflate format; try: # so on top of all there's this workaround: return zlib.decompress(data, -zlib.MAX_WBITS) except zlib.error: return zlib.decompress(data)然后就简单了,encoding_support = ContentEncodingProcessoropener = urllib2.build_opener( encoding_support, urllib2.HTTPHandler )#直接用opener打开网页,如果服务器支持gzip/defalte则自动解压缩content = opener.open(url).read()
以上是"python如何实现gzip/deflate支持"这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注行业资讯频道!
支持
内容
篇文章
网页
琐碎
繁琐
主页
价值
兴趣
小伙
小伙伴
意味
方式
时间
更多
服务器
格式
版本
知识
行业
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
原神亚洲服务器下载
分布式数据库和时序
社会对网络技术人才需求
吉利新能源三电软件开发
生活中还有其他网络安全
数据库管理做什么
泗阳大型网络技术
excel怎么关联数据库
中和智慧互联网科技有限公司
网络安全战略 空间战略
乌鲁木齐软件开发需要多少钱
大数据岗位写成软件开发
如何打开ftp服务器文件
为什么用数据库
现代软件开发不二之选
网络安全宣传电视
qq服务器返回数据失败
雪佛兰服务器故障怎么办
云服务器实例使用场景
城亚网络技术有限公司
三级联动的数据库 树形
数据库运行安全的内容是
戴尔的服务器
nc57数据库导入
数据库 conn的意思
服务器坏了修复软件
安全狗拦截 数据库修改
建立优秀人才数据库的意义
易家旅北京网络技术有限公司
局开展网络安全宣传周