首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >python urllib2会自动解压缩从网页中获取的gzip数据吗?

问python urllib2会自动解压缩从网页中获取的gzip数据吗?
EN

Stack Overflow用户
提问于 2010-10-16 08:45:49
回答 4查看 34.3K关注 0票数 73

我正在使用

代码语言:javascript
复制
 data=urllib2.urlopen(url).read()

我想知道:

  1. 如何判断网址中的数据是否为gzipped格式?如果数据为gzipped格式,
  2. 会自动进行urllib2解压吗?数据将始终是字符串吗?
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2010-10-16 09:21:49

  1. 如何判断网址中的数据是否已压缩?

这将检查内容是否经过gzipped压缩并解压缩:

代码语言:javascript
复制
from StringIO import StringIO
import gzip

request = urllib2.Request('http://example.com/')
request.add_header('Accept-encoding', 'gzip')
response = urllib2.urlopen(request)
if response.info().get('Content-Encoding') == 'gzip':
    buf = StringIO(response.read())
    f = gzip.GzipFile(fileobj=buf)
    data = f.read()

  1. 如果数据经过gzipped压缩,urllib2会自动解压缩吗?数据将始终是字符串吗?

不是的。urllib2不会自动解压缩数据,因为'Accept-Encoding‘头不是由urllib2设置的,而是由您使用:request.add_header('Accept-Encoding','gzip, deflate')设置的

票数 151
EN

Stack Overflow用户

发布于 2010-10-16 09:28:21

如果你正在谈论一个简单的.gz文件,不,urllib2不会解码它,你会得到没有改变的.gz文件作为输出。

如果您正在谈论使用Content-Encoding: gzip或deflate的自动HTTP级压缩,那么这必须由客户端使用Accept-Encoding头故意请求。

urllib2没有设置这个头,所以它得到的响应将不会被压缩。您可以安全地获取资源,而不必担心压缩(尽管由于不支持压缩,请求可能需要更长的时间)。

票数 8
EN

Stack Overflow用户

发布于 2011-08-10 04:05:22

您的问题已经得到了回答,但要获得更全面的实现,请查看Mark Pilgrim's implementation of this,它涵盖了gzip、deflate、安全网址解析以及更多内容,这是一个广泛使用的RSS解析器,但仍然是一个有用的参考。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3947120

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档