如何从YouTube页面获取flv文件

4 投票
2 回答
4168 浏览
提问于 2025-04-17 03:55

你想知道怎么从一个YouTube页面,比如:www.youtube.com/watch?v=T8YCSJpF4g4,获取“flv”文件,对吧?有没有什么好主意?

到目前为止,我尝试过:

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 个回答

4

你现在代码的问题在于,var swfArgs在那个网页的源代码里根本找不到。YouTube的页面一直在变化,所以我会告诉你怎么找到你需要的东西,而不是告诉你YouTube现在是怎么做的。

首先,用一个有好调试工具的浏览器打开这个页面。比如说,Firefox加上Firebug,或者Chrome自带的开发者工具。打开开发者工具,然后找到网络选项卡,或者你的工具里叫别的名字也没关系。

Chrome的开发者工具网络选项卡:
Chrome开发者工具网络选项卡

Firebug的开发者工具网络选项卡:
Firebug网络选项卡

找出FLV文件。查看网址和其他相关位置的参数。看看这些数据是否在网页上,也要看看这些数据是否来自其他请求,这些请求可能有网页上的参数。

只需在Python中重新创建这些请求,你就能得到FLV,就像YouTube的官方网站那样获取它。

3

我建议你看看 youtube-dl。以下是它网站上的简短介绍:

youtube-dl 是一个小型的命令行程序,可以用来从 YouTube.com 和其他一些网站下载视频。它需要安装 Python 解释器,版本是 2.x(x 至少要是 5),而且它不限制操作系统。也就是说,你可以在 Unix 系统、Windows 或 Mac OS X 上使用它。这个程序是公开发布的,意味着你可以修改它、重新分发它,或者随便用它。

撰写回答