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

如何使用Python urllib从指定URL下载目标视频

问题说明

你当前的代码无法正常下载Facebook视频,核心原因如下:

  • 代码中传入的链接是Facebook的视频播放网页地址,并非视频文件的直链地址,直接请求该地址只会返回HTML页面内容,保存为.mp4文件无法正常播放
  • urllib默认请求头会被Facebook反爬机制识别为爬虫程序,请求会被拦截,返回登录提示或错误页面,拿不到有效内容
  • 链接中携带的__cft__、__tn__属于临时鉴权参数,有效期极短,硬编码在代码中很快就会失效
  • 代码仅写import urllib时,部分Python3版本直接调用urllib.request.urlretrieve会抛出模块属性错误,正确导入方式应为import urllib.request
可行实现方法

不要直接请求网页地址下载文件,按以下步骤处理即可:

  • 给请求添加真实浏览器的请求头,模拟正常用户访问,绕过基础反爬校验
  • 请求视频播放页拿到源码后,从源码中解析出真实的视频文件直链地址
  • 对解析到的直链发起流式请求,将内容写入本地mp4文件

参考实现代码如下,运行前先安装依赖:pip install requests beautifulsoup4

import re
import requests
from bs4 import BeautifulSoup

# 替换为目标视频的页面地址,不需要带临时鉴权参数
page_url = "https://www.facebook.com/cofidis/videos/1518507675176091/"
# 模拟Chrome浏览器的请求头
headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36"
}

# 请求视频页面源码
page_resp = requests.get(page_url, headers=headers)
page_resp.raise_for_status()

# 优先匹配高清视频直链,匹配不到则取标清源
hd_video_match = re.search(r'"playable_url_quality_hd":"(.*?)"', page_resp.text)
sd_video_match = re.search(r'"playable_url":"(.*?)"', page_resp.text)
video_url = ""
if hd_video_match:
    video_url = hd_video_match.group(1).replace("\\/", "/")
elif sd_video_match:
    video_url = sd_video_match.group(1).replace("\\/", "/")
else:
    raise RuntimeError("解析视频直链失败,若视频为非公开内容,请在headers中添加你账号登录后的Cookie后重试")

# 流式下载视频,避免大文件占用过多内存
video_resp = requests.get(video_url, headers=headers, stream=True)
video_resp.raise_for_status()
with open("video.mp4", "wb") as f:
    for chunk in video_resp.iter_content(chunk_size=2*1024*1024):
        if chunk:
            f.write(chunk)
print("视频已成功保存为video.mp4")

提示:如果下载的是需要登录才能查看的非公开视频,只需要在headers字典中添加"Cookie": "你自己Facebook账号登录后的Cookie字符串"即可正常解析下载。

内容的提问来源于stack exchange,提问作者oakka sliki

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.31 04:18:23