使用requests模块下载文件时使用流氏下载,或者要查看文件的下载进度的时候会用到 response.iter_content()
def gettsfile(i):#传入待下载的ts文件序号,找到对应的下载地址下载
url="http://y.downya.com/soft/MATLABchengxuyuyan_downyi.com.zip"
user_agent="Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.81 Safari/537.36 SE 2.X MetaSr 1.0"
headers={"User-Agent":user_agent}
path=os.getcwd()
with open(tfile[i],"wb") as fw:
with requests.get(url,headers=headers,stream=True) as r:
#print(r.headers)#此时只有响应头被下载,显示头部信息包括 文件类型,文件大小
filesize = r.headers["Content-Length"]#通过headers获取文件的大小
print("%s_%sbyte" % (tfile[i],filesize))#显示文件大小
chunk_size=1024#1kb
times=int(filesize)//chunk_size
print(times)
i=0
for chunk in r.iter_content(chunk_size):
print(i)
i+=1
fw.write(chunk)
print("\n结束下载")
for chunk in r.iter_content(chunk_size):
上面的代码times等于i的最终值,个人感觉r.iter_content(chunk_size)指定了每次下载1024字节的数据放到chunk里面,后面操作完了它会自动更新
如下载004这个ts文件,大小是68808byte,67kb,times=67,i从0开始计算直到67结束

url=“http://y.downya.com/soft/MATLABchengxuyuyan_downyi.com.zip”
上面的url指定的zip文件16m,当chunk_size=1024*1024下载时如下图所示,每下载1m保存一次。

在Python中使用requests模块下载大文件时,常常采用流式下载以节省内存。通过response.iter_content(chunk_size)可以实现这一目标,例如设定每次处理1024字节的数据块。对于一个67KB的ts文件,可以逐次处理直至完成下载。同样,对于16MB的zip文件,设定chunk_size为1MB,每下载1MB就保存一次,便于观察下载进度。
5542

被折叠的 条评论
为什么被折叠?



