2014-01-09 61 views
1

我一直在遇到问题,我正在开发一个脚本,因为我没有收到任何输出,并且随着时间的推移,脚本的内存使用量越来越大。我发现问题在于我正在使用请求库检查的一些URL。我期待下载一个网页,但是我下载了一个大文件。所有这些数据都存储在内存中,导致我的问题。检查是否正在通过Python下载文件请求库

我想知道的是;请求库有任何方式来检查正在下载什么?有了wget,我可以看到:长度:710330974(677M)[application/zip]。

此信息是否可用于包含请求的标头中?如果是的话,是否有一种方法可以在确定它不是HTML网页时终止下载?

在此先感谢。

回答

4

是的,页眉可以告诉你很多关于页面的信息,大多数页面将包含一个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()方法将触发响应的完整下载。

+0

这很好,谢谢! –

相关问题