You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

无法获取<video>标签src,下载站点视频返回500状态码如何解决?

视频下载实现方案
  • 首先明确站点的加载逻辑:你抓到的随机后缀文件就是视频分片,该站用Video.js配合分片加载策略实现防爬,返回的206状态码是分片请求的标准响应,代表仅返回请求范围内的二进制内容,不存在单独的完整视频直链。
  • 最简方案(无需写代码):安装浏览器视频嗅探扩展(如猫抓、Video DownloadHelper),在页面正常播放视频时,扩展会自动聚合所有分片为完整视频文件,直接点击下载即可。
  • Python代码实现方案:
    1. 不要硬编码Cookie,先通过会话请求课程页面获取有效认证凭证:用requests.Session()维持会话,先GET请求课程详情页,自动保存响应返回的XSRF-TOKEN、findow_session等必要Cookie,避免手工复制的Cookie过期失效。
    2. 动态构造Range请求头:首次请求带Range: bytes=0-1048575(取1MB分片),从响应头的Content-Range字段提取完整视频的总大小,再按固定分片大小逐段构造Range头发起请求。
    3. 拼接所有分片的二进制内容写入本地文件,即可得到完整的MP4视频。

示例代码如下:

import requests
import time

def download_video(course_url, save_path):
    sess = requests.Session()
    # 先请求课程页拿有效cookie
    sess.headers.update({
        'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36'
    })
    sess.get(course_url)
    
    video_api = 'http://findow.ir/academy/playVideo/%D8%AA%D8%AD%D9%84%DB%8C%D9%84-%D8%AA%DA%A9%D9%86%DB%8C%DA%A9%D8%A7%D9%84-%DA%A9%D9%84%D8%A7%D8%B3%DB%8C%DA%A9?key=A6ovzaxPThTSp0vCC73DyTIMzIlI0C1p5RwtF3xr&course=true&type=medium'
    chunk_size = 1024 * 1024  # 1MB分片
    start = 0
    total_size = 0
    video_content = b''
    
    while True:
        range_header = f'bytes={start}-{start + chunk_size - 1}'
        resp = sess.get(video_api, headers={'Range': range_header})
        if resp.status_code not in [206, 200]:
            break
        if not total_size:
            # 从第一次响应拿总大小
            content_range = resp.headers.get('Content-Range', '')
            if content_range:
                total_size = int(content_range.split('/')[-1])
        video_content += resp.content
        start += chunk_size
        # 加延迟避免被封
        time.sleep(0.5)
        if start >= total_size:
            break
    
    with open(save_path, 'wb') as f:
        f.write(video_content)

# 调用示例
download_video('http://findow.ir/academy/course/%D8%AA%D8%AD%D9%84%DB%8C%D9%84-%D8%AA%DA%A9%D9%86%DB%8C%DA%A9%D8%A7%D9%84-%DA%A9%D9%84%D8%A7%D8%B3%DB%8C%DA%A9', 'course_video.mp4')
  • 补充注意事项:如果接口参数key存在时效,可从课程页的前端JS代码中动态提取最新key值,不要硬编码。

内容的提问来源于stack exchange,提问作者Sir-Sorg

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 01:45:05