如何使用Python requests模块下载网站视频?解决URL访问返回404问题
问题原因和解决步骤
你遇到的直接访问视频URL返回404的问题,基本都是站点做了访问权限校验导致的,按下面的步骤排查处理即可:
1. 优先检查防盗链校验(最常见原因)
绝大多数站点会校验视频请求的Referer和User-Agent头,你直接在地址栏访问URL时,请求没有携带原页面的来源信息,就会被拦截。请求视频时需要和浏览器访问时的请求头完全对齐:
- 从浏览器控制台网络面板复制访问原页面时的
User-Agent值 - 新增
Referer字段,值填写视频所在原页面的完整URL - 可额外补充
Accept、Origin字段和浏览器请求保持一致
示例代码:
import requests headers = { "User-Agent": "你从浏览器复制的UA字符串", "Referer": "视频所在原页面的完整URL", "Accept": "video/*, */*" } video_url = "你提取到的视频URL" resp = requests.get(video_url, headers=headers) if resp.status_code == 200: with open("download.mp4", "wb") as f: f.write(resp.content)
2. 排查URL时效签名
如果补全请求头后还是返回404,你可以刷新原页面后重新提取一次视频URL,对比两次URL的差异:
- 如果URL中存在
sign、expire、t、timestamp这类字段,说明URL是临时生成的,带有有效时间限制 - 这种场景下不能直接复用提前复制好的URL,需要每次爬取前先请求原页面,从页面源码或者关联接口中实时提取最新的视频URL
3. 检查Cookie校验
部分站点会把访问凭证存在Cookie中,请求视频时需要携带访问原页面时下发的Cookie,使用requests的Session对象即可自动维持Cookie,不需要手动复制:
示例代码:
import requests sess = requests.Session() origin_page_url = "视频所在原页面的URL" # 先请求原页面,自动存储下发的Cookie sess.get(origin_page_url, headers=headers) # 用同一个Session实例请求视频 resp = sess.get(video_url, headers=headers)
通用兜底方案
如果以上方法都无效,你可以打开浏览器控制台的网络面板,找到视频的请求条目,右键选择「复制为cURL」,再将cURL命令转换成requests代码,就能1:1还原浏览器的请求逻辑,基本都能成功请求到视频内容。
内容的提问来源于stack exchange,提问作者MWK
相关产品推荐
相关产品推荐

