检查Python Requests库是否正在下载文件

时间:2014-01-09 13:05:10

标签: python http python-requests

我一直在使用我正在开发的脚本的问题,因为我没有收到任何输出,并且脚本的内存使用量随着时间的推移而变得越来越大。我已经发现问题在于我正在使用Requests库检查的一些URL。我期待下载一个网页,但我下载了一个大文件。然后将所有这些数据存储在内存中导致我的问题。

我想知道的是;有什么办法让请求库检查下载的是什么?用wget我可以看到:长度:710330974(677M)[application / zip]。

请求标题中是否提供此信息?如果是这样,有一种方法可以在确定它不是HTML网页时终止下载吗?

提前致谢。

1 个答案:

答案 0 :(得分:5)

是的,标题可以告诉您很多关于页面的内容,大多数页面将包含Content-Length标题。

但是,默认情况下,请求会在.get().post()等调用返回之前完整下载。设置stream=True关键字以推迟加载响应:

response = requests.get(url, stream=True)

现在您可以检查标题,如果您不喜欢找到的内容,只需丢弃该请求:

length = int(response.headers.get('Content-Length', 0))
if length > 1048576:
    print 'Response larger than 1MB, discarding

随后访问.content.text属性或.json()方法将触发完整的响应下载。