Content encoding,content-encoding: gzip
关于内容-编码:gzip-知道如何创建空间
内容编码背景:gzip 2012-04-20
===
如果你的网络爬虫(如crawler)在抓取网页时没有发送Accept-Encoding: gzip,那么你就out了:
今天,超过99%的网络爬虫声明他们支持gzip(或deflate)编码。
如果你的节目属于这99%,那么恭喜你,但也不要太高兴。你的程序是否正确地处理了内容编码:gzip?
问题
===
用于处理内容的典型代码片段(python)——编码:gzip:
html _ data=GzipFile(file obj=StringIO(html _ data),mode=r )。阅读()
假设html_data是Web服务器返回的内容编码为gzip的数据。
那么在大多数情况下,上面的代码都是可以正确处理的。遗憾的是,你会发现,对于某些网址,浏览器可以正常显示内容。
但是你的网络爬虫会出错!
分析
===
并非所有的Web服务器(或应用程序)都是守法公民。在少数应用中,gzip压缩数据后会添加一些“尾部”数据。
在这种情况下,一些数据解压缩模块(如Python的GzipFile模块)会有处理异常。
浏览器是个例外。他们充分理解并考虑到现实世界的复杂性,会自动丢弃多余的“尾巴”,正常解压处理页面数据。
解决
===
Python GzipFile模块有一个未公开的属性:extrabuf,负责保存解压成功的数据。因此,下面的代码具有更好的兼容性:
尝试:
gf=GzipFile(file obj=StringIO(html _ data),mode=r )
html_data=gf.read()
除了:
html_data=gf.extrabuf
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。