Content encoding,content-encoding- gzip

  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的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: