获取YouTube网址以下载视频

时间:2015-12-13 17:46:39

标签: python video youtube

我正在编写用于下载YouTube视频的Python脚本。我正在向某个YouTube网址发送请求并获得相应的回复。现在,我想获取该视频的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">

2 个答案:

答案 0 :(得分:1)

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

https://github.com/nficano/pytube

答案 1 :(得分:0)

我知道这是一个老问题,但是我会添加我的答案来帮助某人: 我认为您想实施自己的脚本来获取直接的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