如何从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
我将如何重新审视所有这些请求?:
请帮助这个杀了我。
答案 0 :(得分:4)
您当前代码的问题是,var swfArgs
确实没有出现在该网页的来源中。 YouTube会不断更改自己的网页,因此我会告诉您如何找到您需要做的事情,而不是YouTube目前所做的事情。
使用良好的调试工具在浏览器中打开页面。例如,带有Firebug的Firefox或带有开发人员工具的Chrome。打开开发人员工具,然后转到网络选项卡或工具所称的任何工具。
Chrome的开发人员工具网络标签:
Firebug的开发人员工具网络标签:
找到FLV。在URL和其他相关位置查找参数。查看网页上是否有任何数据。另请查看是否有任何数据来自其他请求,这些请求可能包含网页上的参数。
只需在Python中重新创建请求,您就可以获得FLV,就像YouTube的官方网站获得它一样。
答案 1 :(得分:3)
我建议你看看youtube-dl。这是从其网站上的简短描述:
youtube-dl 是一个从中下载视频的小型命令行程序 YouTube.com和更多网站。它需要 Python 解释器, 版本2.x(x至少为5),并非特定于平台。它 应该在您的Unix机器,Windows或Mac OS X中运行。它是 发布到公共域,这意味着你可以修改它, 重新分配或随意使用它。