【问题标题】:Getting YouTube URL for downloading video获取用于下载视频的 YouTube URL
【发布时间】:2025-12-13 09:10:02
【问题描述】:

我正在编写一个用于下载 YouTube 视频的 Python 脚本。我正在向某个 YouTube URL 发送请求并得到它的响应。现在,我想获取该视频的 URL,以便下载。我找到的所有答案都已过时。响应中的视频 URL 隐藏在哪里?还是没有办法获取视频网址?

import urllib2
import json
f = open("video.txt","w")
response = urllib2.urlopen("https://youtu.be/OulN7vTDq1I")
f.write(response.read())

我在响应的嵌入部分得到了类似的东西:

<link rel="alternate" type="application/json+oembed" href="http://www.youtube.com/oembed?format=json&amp;url=https%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3DOulN7vTDq1I" title="Badshah - DJ Waley Babu | feat Aastha Gill | Party Anthem Of 2015 | DJ Wale Babu">
  <link rel="alternate" type="text/xml+oembed" href="http://www.youtube.com/oembed?format=xml&amp;url=https%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3DOulN7vTDq1I" title="Badshah - DJ Waley Babu | feat Aastha Gill | Party Anthem Of 2015 | DJ Wale Babu">

【问题讨论】:

  • 这要复杂得多...... YouTube 不使用 .mp4 他们将视频直接流式传输到“播放器”

标签: python video youtube


【解决方案1】:

我知道这是个老问题,但我会添加我的答案来帮助某人: 我想你想实现自己的脚本来获得直接的 youtube 流链接, 不简单但有可能,引用自pytube website:

YouTube 限制下载视频的策略是向客户端发送加密版本的签名,以及在 JavaScript 中混淆的解密算法。为了让客户端播放视频,JavaScript 必须获取加密版本,通过一系列“转换函数”循环,然后使用输出对媒体 URL 进行签名,该模块“加密模块”负责 (1) 查找和提取那些“转换函数”(2) 将它们映射到 Python 等价物并 (3) 获取加密签名并对其进行解码。

也就是说:你需要下载youtube地址的html页面,然后找到java脚本函数来解码实际的视频流,然后你可以将这些链接作为直接下载链接

看看pytube project它的开源代码,你可以通过一些努力了解它是如何工作的

这里是一个如何使用来自Github 的 pytube 的示例: 此示例将下载可用的最高质量渐进式下载流。

from pytube import YouTube
YouTube('http://youtube.com/watch?v=9bZkp7q19f0').streams.first().download()

另一个例子:

yt = YouTube('http://youtube.com/watch?v=9bZkp7q19f0')
yt.streams.all()  # list of all available streams
yt.streams[0].url  # gives the direct url link of first stream

【讨论】:

    【解决方案2】:

    使用 pyTube - 轻量级、无依赖的 Python 库(和命令行实用程序)来下载 YouTube 视频。

    https://github.com/nficano/pytube

    【讨论】:

    • 我正在尝试实现我自己的。
    • 如果您要推荐一个库,您可能需要考虑添加一个小的 sn-p 来显示它与问题相关的用法。发布仅链接的答案很可能会将此答案标记为低质量。
    最近更新 更多