文章目录
python 视频断点续传
将下载或上传任务(一个文件或一个压缩包)人为的划分为几个部分,每一个部分采用一个线程进行上传或下载,如果碰到网络故障,可以从已经上传或下载的部分开始继续上传下载未完成的部分,而没有必要从头开始上传下载。用户可以节省时间,提高速度。
一、分割视频
1、分割的每个小部分的大小:
size = 1024 * 100 # 100k
2、获取视频大小:
当在请求上设置stream=True时,没有立即请求内容,只是获取了请求头。推迟下载响应体直到访问
Response.content
属性
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:67.0) Gecko/20100101 Firefox/67.0'
}
resp = requests.get(url, headers=headers, stream=True)
content_length = resp.headers['content-length']
3、分割视频:
设置请求头里面的Range
参数
可以分割成多少个视频:
count = int(content_length) // size
设置Range:
Range
:告知服务端,客户端下载该文件想要从指定的位置开始下载,格式: ‘Range’: ‘bytes=start-end’。
start开始位置, end结束位置。
range_liat = []
for i in range(count):
start = i * size # 开始位置
# 结束位置
if i == count - 1:
end = content_length # 最后的一部分视频
else:
end = start + size
if i > 0:
start += 1
headers_range = {
'Range': f'bytes={start}-{end}'}
range_list.append(headers_range)
二、请求视频
1、设置请求头
for i, headers_range in enumerate(range_list):
headers_range.update(headers)
resp = requests.get(url, headers=headers_range)
2、保存视频
with open(f'{i}', 'wb') as f:
f.write(resp.content)
三、断点续传
确保下载文件的文件夹里没有其他文件
1、获取保存视频的文件夹里面的文件的名称:
import os
f_list = os.listdir(path)