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器,但仍然是一个有用的参考。