基于Python和request下载视频的方法
·
已有video_url情况下,可使用浏览器打开视频然后保存,更直接方式是通过request下载。
这里参考网络资料,示例基于python和request下载视频的方法。
1 安装依赖
首先确保安装 requests
pip install requests
如果需要显示进度条,可以安装tqdm
pip install tqdm
2 下载视频
这里分别示例有进度条下载和无进度条下载的代码,并给出注意事项。
2.1 有进度条版本
以下是一个request下载视频的代码示例。
支持流式下载避免占用过多内存,包含错误处理和进度显示。
import requests
import os
from tqdm import tqdm # 可选,用于显示进度条
def download_video(url, save_path):
"""
从给定的URL下载视频并保存到本地路径。
Args:
url (str): 视频文件的URL(如 .mp4 文件链接)
save_path (str): 本地保存路径,包括文件名(如 'video.mp4')
Returns:
bool: 下载成功返回True,失败返回False
"""
try:
# 发送GET请求,启用流式下载
with requests.get(url, stream=True, timeout=10) as response:
response.raise_for_status() # 检查HTTP错误(如404、403等)
# 获取文件大小(可选,用于进度条)
total_size = int(response.headers.get('content-length', 0))
# 以二进制写入模式打开文件
with open(save_path, 'wb') as file:
# 使用tqdm显示进度条(如果安装了tqdm)
with tqdm(total=total_size, unit='B', unit_scale=True, desc=os.path.basename(save_path)) as pbar:
for chunk in response.iter_content(chunk_size=8192):
file.write(chunk)
pbar.update(len(chunk)) # 更新进度条
return True
except requests.exceptions.RequestException as e:
print(f"下载失败:{e}")
return False
# 使用示例
video_url = "https://example.com/video.mp4"
output_path = "downloaded_video.mp4"
success = download_video(video_url, output_path)
if success:
print("视频下载完成!")
else:
print("下载出错,请检查URL或网络连接。")
代码说如下所示
1)参数说明
stream=True确保响应以流的方式读取,而不是一次性加载到内存中,适合大文件下载。
response.iter_content(chunk_size=8192)按块迭代响应内容,每次写入文件,防止内存占用过高。
2)错误处理
response.raise_for_status()会捕获HTTP错误如404;RequestException捕获网络相关问题。
3)进度条
使用 tqdm显示下载进度,如果未安装 tqdm,只需移除相关代码或改用简单的打印。
4)文件大小
通过 `content-length` 获取文件总大小,用于进度条计算。
2.2 无进度条版本
以下是没有安装tqdm的无进度条的版本。
import requests
def download_video_simple(url, save_path):
try:
with requests.get(url, stream=True) as response:
response.raise_for_status()
with open(save_path, 'wb') as f:
for chunk in response.iter_content(chunk_size=8192):
f.write(chunk)
return True
except Exception as e:
print(f"下载失败:{e}")
return False
2.3 注意事项
某些视频网站可能检查 `User-Agent`,可以通过 `headers` 参数伪装浏览器请求:
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36'}
requests.get(url, headers=headers, stream=True)
如果视频来自需要登录或验证的网站,如需要cookies、token,需要额外处理认证信息。
如果是动态生成的视频url,如流媒体网站,这个方法不适用,可以考虑youtube-dl或 pytube。
reference
---
更多推荐



所有评论(0)