如何从Pexels下载视频?Python下载代码生成3KB文件问题排查
Pexels视频下载代码错误原因及修复方案
错误原因
- 你请求的是Pexels视频的详情页URL,而非视频文件的直接资源链接。该URL返回的是网页HTML代码,不是视频数据流,所以保存的文件实际是网页文本,大小仅几KB。
- 代码存在语法错误:
requests.get()返回的是Response对象,直接执行f.write(d)会抛出异常,正确写法应为写入d.content(响应的二进制内容),但这不是文件过小的核心原因。
修复方案
要下载视频,需先从详情页HTML中提取视频的真实下载链接。以下是可运行的修复代码:
步骤说明
- 请求视频详情页,获取网页HTML内容
- 解析HTML,提取不同分辨率的视频源链接
- 请求真实视频链接,保存视频文件
代码示例
import requests from bs4 import BeautifulSoup # 视频详情页地址 video_page_url = 'https://www.pexels.com/video/a-rocky-river-in-the-forest-5896379/' # 模拟浏览器请求头,避免被拦截 headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36' } # 获取详情页HTML page_response = requests.get(video_page_url, headers=headers) soup = BeautifulSoup(page_response.text, 'html.parser') # 提取视频真实下载链接 video_element = soup.find('video') if video_element: # 获取所有分辨率的视频源 video_sources = video_element.find_all('source') # 选择最高分辨率的视频(通常是最后一个源) target_video_url = video_sources[-1]['src'] # 下载并保存视频 video_response = requests.get(target_video_url, headers=headers) with open('test.mp4', 'wb') as f: f.write(video_response.content) print('视频下载完成') else: print('未找到视频资源')
注意事项
- 必须添加
User-Agent请求头,模拟浏览器行为,否则可能被Pexels的反爬机制拦截。 - Pexels的页面结构若发生变更,需调整HTML解析逻辑(比如修改元素查找的方式)。
内容的提问来源于stack exchange,提问作者mnnewbilr
相关产品推荐
相关产品推荐

