【发布时间】:2015-07-16 03:02:28
【问题描述】:
我正在使用urllib.request。如果我将 Accept-Encoding 设置为 gizp, deflate,则返回的数据是压缩流,可节省 60% 到 80% 的流量。是否有自动解压缩数据的选项,还是我必须自己处理?如果是后者,使用哪些合适的工具?
【问题讨论】:
标签: python-3.x urllib python-3.4
我正在使用urllib.request。如果我将 Accept-Encoding 设置为 gizp, deflate,则返回的数据是压缩流,可节省 60% 到 80% 的流量。是否有自动解压缩数据的选项,还是我必须自己处理?如果是后者,使用哪些合适的工具?
【问题讨论】:
标签: python-3.x urllib python-3.4
我建议从urllib 切换到requests。它会自动handles gziped data。
一个例子:
>>> r = requests.get('https://api.github.com/events')
>>> r.text
u'[{"id":"2978193412","type":"PushEvent","actor":{"id":13182197,"login":"ClothoWong","gravatar_id":"","url":"https://api.github.com/users/...
(为简洁起见)
在上面,您看到了一些漂亮的 JSON,但它实际上是使用 GZIP 编码下载的:
>>> r.raw.getheaders()['Content-Encoding']
'gzip'
(您还可以通过您喜欢的浏览器开发工具确认端点以 gzip 编码响应。)
在我看来,requests 是比urllib 更好的选择,无论如何。你最终会得到更少、更简单的代码来做同样的事情。
【讨论】:
urllib 的投入太大了。将考虑requests 进行新工作。我的问题的答案是:zlib.decompress(gizppedContent, 16+zlib.MAX_WBITS).
requests 可用于任何新工作发送请求(包括当前未完成的任务),旧工作可以单独放置,直到需要更改。也就是说,requests 使用起来更加直观和简单,您真的应该权衡继续使用urllib 的成本与增加requests 的成本。我想你会发现你很快就会花更多的时间来尝试找出urllib,而不是学习requests。在不恰当的抽象上“投入过多”通常最终会很快花费更多。