我在开发脚本时一直遇到问题,因此我没有收到任何输出,并且脚本的内存使用量随着时间的推移越来越大。我发现问题出在我正在检查请求库的一些 URL 上。我期待下载一个网页,但我下载了一个大文件。然后所有这些数据都存储在内存中,导致我出现问题。
我想知道的是;请求库有什么方法可以检查正在下载的内容吗?使用 wget 我可以看到:长度:710330974 (677M) [application/zip]。
此信息在请求的 header 中是否可用?如果是这样,是否有一种方法可以在确定它不是 HTML 网页后终止下载?
提前致谢。
最佳答案
是的,标题可以告诉您很多关于该页面的信息,大多数页面将包含一个 Content-Length 标题。
然而,默认情况下,请求会在 .get()
或 .post()
等调用返回之前完整下载。设置 stream=True
关键字以延迟加载响应:
response = requests.get(url, stream=True)
现在您可以检查 header ,如果您不喜欢您发现的内容,则丢弃该请求:
length = int(response.headers.get('Content-Length', 0))
if length > 1048576:
print 'Response larger than 1MB, discarding
随后访问 .content
或 .text
属性,或 .json()
方法将触发响应的完整下载。
关于python - 检查 Python 请求库是否正在下载文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21021120/