网络爬虫--网页数据压缩(python deflate gzip)
来源:互联网 发布:路由器网络限速 编辑:程序博客网 时间:2024/06/11 13:05
转自:http://www.jianshu.com/p/2c2781462902
做项目就伴随着一个问题--数据来源。在网络数据获取的过程,考虑到数据的动态下载需要爬虫。这也是必经之路吧。
我在运用urllib2做相当简单的爬虫入门实验的时候,出现编码以及压缩等问题。这一个坑很多人踩过,甚至有人处理编码问题会出现一种情况,就是5分钟开发完成,25分钟处理编码问题。更不用说数据压缩,数据会面目全非。网页压缩主要两种,区别可参考gzip和deflate的几点区别。
在这里用python举个栗子,小项目,用urllib2爬网页十分简单。
data = urllib2.urlopen(url).read()
网上有各种各样的解决数据压缩的方法。但是都没有很完美的解决方案。有些讲的是deflate,有的讲的是gzip。事实上,网页压缩技术采用deflate的网站已经很少,由于国内落后的网站还有一个很大保有量,特别是一些政府企事业的网站。我希望能提供一种两全齐美的解决方案。
deflate
import zlibdef deflate(data): try: return zlib.decompress(data, -zlib.MAX_WBITS) except zlib.error: return zlib.decompress(data)
两种压缩格式的解压方法有很大的差异。
gzip
from gzip import GzipFilefrom StringIO import StringIOdef gzip(data): buf = StringIO(data) f = gzip.GzipFile(fileobj=buf) return f.read()
将两者结合写成一个整合方法
通过对Content-Encoding
属性的判断,将两个方法结合在一起。
import urllib2from gzip import GzipFilefrom StringIO import StringIOimport zlibdef loadData(url): request = urllib2.Request(url) request.add_header('Accept-encoding', 'gzip,deflate') response = urllib2.urlopen(request) content = response.read() encoding = response.info().get('Content-Encoding') if encoding == 'gzip': content = gzip(content) elif encoding == 'deflate': content = deflate(content) return contentdef gzip(data): buf = StringIO(data) f = gzip.GzipFile(fileobj=buf) return f.read()def deflate(data): try: return zlib.decompress(data, -zlib.MAX_WBITS) except zlib.error: return zlib.decompress(data)def main(): url = "http://www.szxuexiao.com/" content = loadData(url) print contentif __name__ == '__main__': main()
文/brandonxiang(简书作者)
原文链接:http://www.jianshu.com/p/2c2781462902
著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”。
原文链接:http://www.jianshu.com/p/2c2781462902
著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”。
0 0
- 网络爬虫--网页数据压缩(python deflate gzip)
- python 网络爬虫(三) 多线程,gzip加速,网页下载
- 抓取网页的gzip/deflate
- 网络爬虫-网页源码的gzip压缩和解压
- Apache开启deflate(Gzip)和Expires提升网页加载速度
- Apache开启deflate(Gzip)和Expires提升网页加载速度
- Delphi中获取IE网页后,对GZIP方式的网页解压(gzip,deflate)
- python网络爬虫,抓取网页图片
- Python网络爬虫(1)获取网页
- 用python写网络爬虫-下载网页
- Accept-Encoding: gzip,deflate
- deflate与gzip
- gzip and deflate
- Accept-Encoding: gzip,deflate
- gzip,deflate,zlib辨析
- GZIP, ZLIB, DEFLATE, 文件格式
- Accept-Encoding: gzip,deflate
- gzip,deflate,zlib辨析
- Socket TCP技术详解
- UBUNTU的默认root密码是多少,修改root密码
- Android Studio 2.2.2导入Eclipse中创建的项目
- 数据爬虫综述
- azkaban 上传的zip文件到哪儿了?
- 网络爬虫--网页数据压缩(python deflate gzip)
- flume+kafka
- mysql索引
- 数据结构实验之图论四:迷宫探索
- 安装redis 及常见问题
- Lvs之NAT、DR、TUN三种模式的应用配置案例
- 页面布局 display:block inline inlineblock
- oracle12c新特性(6)--备份特定用户特权
- 11.23日记