python urllib2会自动解压缩从网页中提取的gzip数据吗?
我在用着
data=urllib2.urlopen(url).read() 我想知道:
- 
我怎么知道一个URL的数据是否被压缩? 
- 
urllib2会自动解压缩数据吗? 数据总是一个string? 
- 我怎么知道一个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() 
- urllib2会自动解压缩数据吗? 数据总是一个string?
 不。urllib2不会自动解压缩数据,因为'Accept-Encoding'标头不是由urllib2设置的,而是由您使用: request.add_header('Accept-Encoding','gzip, deflate') 
 如果你正在谈论一个简单的.gz文件,不,urllib2将不会解码它,你会得到不变的.gz文件作为输出。 
 如果您正在讨论使用Content-Encoding: gzip进行自动HTTP级别压缩Content-Encoding: gzip或deflate ,则必须使用Accept-Encoding标头,由客户端有意请求。 
urllib2不设置这个头,所以它的回应将不会被压缩。 您可以安全地获取资源,而不必担心压缩(尽pipe由于压缩不受支持,请求可能需要更长的时间)。
你的问题已经得到了回答,但为了更全面的实现,看看Mark Pilgrim的这个实现 ,它涵盖了gzip,deflate,安全的URLparsing,以及更多,广泛使用的RSSparsing器,但仍然是一个有用的参考。