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

我在用着

data=urllib2.urlopen(url).read() 

我想知道:

  1. 我怎么知道一个URL的数据是否被压缩?

  2. urllib2会自动解压缩数据吗? 数据总是一个string?

  1. 我怎么知道一个URL的数据是否被压缩?

这将检查内容是否被压缩并解压缩:

 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. urllib2会自动解压缩数据吗? 数据总是一个string?

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

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

如果您正在讨论使用Content-Encoding: gzip进行自动HTTP级别压缩Content-Encoding: gzipdeflate ,则必须使用Accept-Encoding标头,由客户端有意请求。

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

你的问题已经得到了回答,但为了更全面的实现,看看Mark Pilgrim的这个实现 ,它涵盖了gzip,deflate,安全的URLparsing,以及更多,广泛使用的RSSparsing器,但仍然是一个有用的参考。