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

Dan*_*lch 1 python http python-requests

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

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

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

提前致谢.

Mar*_*ers 5

是的,标题可以告诉你很多关于页面的信息,大多数页面都会包含Content-Length标题.

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

response = requests.get(url, stream=True)
Run Code Online (Sandbox Code Playgroud)

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

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

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