我一直在使用我正在开发的脚本的问题,因为我没有收到任何输出,并且脚本的内存使用量随着时间的推移而变得越来越大。我已经发现问题在于我正在使用Requests库检查的一些URL。我期待下载一个网页,但我下载了一个大文件。然后将所有这些数据存储在内存中导致我的问题。
我想知道的是;有什么办法让请求库检查下载的是什么?用wget我可以看到:长度:710330974(677M)[application / zip]。
请求标题中是否提供此信息?如果是这样,有一种方法可以在确定它不是HTML网页时终止下载吗?
提前致谢。
答案 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()
方法将触发完整的响应下载。