如何从youtube页面获取flv文件

时间:2011-10-08 01:27:48

标签: python youtube

如何从youtube页面获取“flv”文件,例如:www.youtube.com/watch?v = T8YCSJpF4g4 ...有什么想法吗?

到目前为止,我已尝试过:

import urllib
import os
import sys

page=urllib.urlopen('http://www.youtube.com/watch?v=FuLDIgfPae8')
result = page.read()
#result=open("test.html").read()
print result
startindex = result.index("var swfArgs")
result = result[startindex:]
endindex=result.index("};")
result=result[:endindex]
result =  result.split(",")
get={}
print result
def download(url,output):
    """Copy the contents of a file from a given URL to a local file."""   
    webFile = urllib.urlretrieve(url,output+".flv")

for line in result:
    if "video_id" in line or "\"t\"" in line :
        v,vnum = line.replace("\"","").split(":")
        get[v.strip()]=vnum.strip()

dload = "http://www.youtube.com/get_video?video_id=%s&t=%s" % ( get['video_id'],get['t'])

try :
    download(dload,get['video_id'])
except Exception,e:
    print "Error: ",e

但这给了我一个错误:

startindex = result.index("var swfArgs")
ValueError: substring not found

我不确定如何修复此错误。

@icktoofay

我将如何重新审视所有这些请求?:

enter image description here

请帮助这个杀了我。

2 个答案:

答案 0 :(得分:4)

您当前代码的问题是,var swfArgs确实没有出现在该网页的来源中。 YouTube会不断更改自己的网页,因此我会告诉您如何找到您需要做的事情,而不是YouTube目前所做的事情。

使用良好的调试工具在浏览器中打开页面。例如,带有Firebug的Firefox或带有开发人员工具的Chrome。打开开发人员工具,然后转到网络选项卡或工具所称的任何工具。

Chrome的开发人员工具网络标签:
Chrome developer tools network tab

Firebug的开发人员工具网络标签:
Firebug network tab

找到FLV。在URL和其他相关位置查找参数。查看网页上是否有任何数据。另请查看是否有任何数据来自其他请求,这些请求可能包含网页上的参数。

只需在Python中重新创建请求,您就可以获得FLV,就像YouTube的官方网站获得它一样。

答案 1 :(得分:3)

我建议你看看youtube-dl。这是从其网站上的简短描述:

  

youtube-dl 是一个从中下载视频的小型命令行程序   YouTube.com和更多网站。它需要 Python 解释器,   版本2.x(x至少为5),并非特定于平台。它   应该在您的Unix机器,Windows或Mac OS X中运行。它是   发布到公共域,这意味着你可以修改它,   重新分配或随意使用它。