如何使用Python脚本下载YouTube视频

1 投票
1 回答
16167 浏览
提问于 2025-04-17 10:10

我想用一个Python脚本从YouTube下载视频。但是我无法从YouTube页面获取视频的链接。

比如,给定这个链接:http://www.youtube.com/watch?v=5qcmCUsw4EQ&feature=g-all-u&context=G2633db8FAAAAAAAAAAA

  1. 我需要把视频下载成flv格式或者其他格式。同时,我还希望能下载不同清晰度的视频。
  2. 我尝试过一些脚本,比如youtube-dl和quvi,但它们都出错了,无法使用。请帮帮我,我会非常感激的。

1 个回答

10

你需要解析一下包含视频的 <embed> 标签里的 flashvars 变量。这些变量的名字可能会变,所以你可能需要试几次才能找到当前的变量名。大致来说,你可以使用像 mechanize 这样的库来获取网页的 HTML 内容,然后用 BeautifulSoup 来解析这些 HTML,并提取出 <embed> 元素中的 flashvars 字段。接着,看看这些变量,找出哪个包含了视频的链接。

例如:

  br = mechanize.Browser()
  # Browser options
  br.set_handle_equiv(True)
  br.set_handle_redirect(True)
  br.set_handle_referer(True)
  br.set_handle_robots(False)
  # Follows refresh 0 but not hangs on refresh > 0
  br.set_handle_refresh(mechanize._http.HTTPRefreshProcessor(), max_time=1)
  # User-Agent (this is cheating, ok?)
  br.addheaders = [('User-agent', 'Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.1) Gecko/2008071615 Fedora/3.0.1-1.fc9 Firefox/3.0.1')]
  br.open('%s?v=%s' % (YOUTUBE_URL, vidId))
  soup = BeautifulSoup.BeautifulSoup(br.response().read())
  flashVars = urllib2.urlparse.parse_qs(soup.find('embed').get('flashvars'))
  # Return the first second video source URL
  return flashVars['fmt_stream_map'][0].split('|')[1]

撰写回答