stream&chunk&chunk_size
stream=true真的嘎嘎好用, 我刚爬一个动漫时, 没加stream=true时, 程序一直卡在request.get(url)上(在一次性写入整个视频资源), 加上stream=true后, 程序效果立竿见影, 直接就生成了.mp4文件并不断向其中添加数据
具体讲解
stream=True
和 chunk_size=1024
是关于使用 requests
库下载文件时的两个重要参数设置。
-
stream=True
:- 当设置为
True
时,允许通过流式方式(streaming)获取响应内容。这意味着requests
不会立即下载响应体的所有内容,而是分块获取,每次获取一部分数据。 - 这对于下载大文件(比如视频、音频等)特别有用,因为可以在下载过程中逐步处理数据,而不需要一次性将整个文件加载到内存中,从而节省内存空间。
- 默认情况下,
stream
参数是False
,意味着requests
会尝试一次性获取整个响应内容。但对于大文件下载来说,这可能会导致内存问题或者长时间等待。
- 当设置为
-
chunk_size=1024
:chunk_size
是指定每次从响应流中读取的数据块大小。在示例中,设置为1024
字节(即 1KB)。- 控制
chunk_size
的大小可以在效率和内存使用之间做出权衡。通常,选择适当的块大小可以优化下载速度和处理效率。
综合使用这两个参数可以有效地处理大文件的下载,例如视频文件。以下是示例代码的一部分,展示了如何使用这些参数下载视频文件:
import requests
video_url = 'https://example.com/video.mp4'
filename = 'video.mp4'
# 发送带有stream=True参数的GET请求
response = requests.get(video_url, stream=True)
if response.status_code == 200:
with open(filename, 'wb') as f:
# 按块写入文件
for chunk in response.iter_content(chunk_size=1024):
if chunk:
f.write(chunk)
print(f"下载完成:{filename}")
else:
print("下载失败")
在这个例子中,通过使用 stream=True
和 chunk_size=1024
,我们可以逐块下载视频文件,并将每个数据块写入到本地文件中,而不会将整个文件加载到内存中。