安装tqdm和requests库
pip install tqdm -i https://pypi.tuna.tsinghua.edu.cn/simple
pip install requests -i https://pypi.tuna.tsinghua.edu.cn/simple
带进度条下载
import time # 引入time模块,用于处理时间相关的功能
from tqdm import * # 从tqdm包中引入所有功能,tqdm用于在循环中显示进度条
import requests # 引入requests模块,用于发起网络请求
# 设置请求头信息,模拟浏览器访问
headers = {
"accept": "*/*", # 接受任何类型的返回数据
"accept-language": "zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6", # 设置接受的语言类型和优先级
"cache-control": "no-cache", # 通知服务器不使用缓存,获取最新的数据
"pragma": "no-cache", # 与cache-control类似,某些服务器可能会用到
"priority": "i", # 请求的优先级
"range": "bytes=2523136-", # 请求部分内容,从指定字节开始到结束
"referer": "https://v.jstv.com/", # 通知服务器该请求是从哪个页面来的
"sec-ch-ua": "\"Not/A)Brand\";v=\"8\", \"Chromium\";v=\"126\", \"Microsoft Edge\";v=\"126\"", # 安全相关的客户端信息
"sec-ch-ua-mobile": "?0", # 是否为移动设备
"sec-ch-ua-platform": "\"Windows\"", # 客户端平台
"sec-fetch-dest": "video", # 请求的目的地,这里是视频
"sec-fetch-mode": "no-cors", # 请求模式,不进行跨域资源共享(CORS)预检请求
"sec-fetch-site": "same-site", # 请求的站点,这里是同站请求
"user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36 Edg/126.0.0.0" # 用户代理,模拟浏览器信息
}
# 视频文件的URL
url = "https://vod.v.jstv.com/2024/07/08/JSTV_JSGGNEW_1720439020421_QW5qn10_1879.mp4"
# 发起网络请求,获取视频文件流,并设置请求头
response = requests.get(url, stream=True, headers=headers)
# 获取视频文件的大小,并转换为MB或GB单位显示
contant_size = int(response.headers['content-length']) / 1024 / 1000 # 从响应头中获取内容长度,并转换为MB
if contant_size > 1000:
print("视频大小", '{:.2f}'.format(contant_size / 1000), "gb") # 如果大于1000MB,则显示为GB
elif contant_size > 1:
print("视频大小", '{:.2f}'.format(contant_size), "mb") # 如果大于1MB,则显示为MB
elif contant_size < 1:
print("视频大小", '{:.2f}'.format(contant_size * 1000), "kb") # 如果小于1MB,则显示为KB
# 打开一个名为"测试.mp4"的文件,以二进制写模式
with open(r"测试.mp4", "wb") as file:
# 使用tqdm进度条显示下载进度
for data in tqdm(iterable=response.iter_content(1024 * 1000), # 每次读取1024KB数据
total=contant_size, # 进度条的总长度为文件大小
postfix='带带爬虫', # 进度条后缀
unit='mb', # 显示单位为MB
desc="视频下载"): # 进度条前缀描述
file.write(data) # 将读取到的数据写入文件