打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
Python 笔记六:入门爬虫坑

源码github地址在此,记得点星:
https://github.com/brandonxiang/get_html_deflate_gzip


做项目就伴随着一个问题--数据来源。在网络数据获取的过程,考虑到数据的动态下载需要爬虫。这也是必经之路吧。

我在运用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()

转载,请表明出处。总目录Awesome GIS

转载,请表明出处。总目录后端记事本

微信公众号
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
Python 抓取网页乱码原因分析
关于web压缩,gzip等
HTTP协议中你必须知道的三种数据格式
HTTP 协议中你必须知道的三种数据格式
PHP的zlib压缩工具扩展包学习
Python爬虫:一些常用的爬虫技巧总结
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服