【问题标题】:How to download youtube videos using a python script [closed]如何使用 python 脚本下载 youtube 视频 [关闭]
【发布时间】:2012-02-09 17:50:17
【问题描述】:

我需要使用 python 脚本从 youtube 下载视频。但是我无法从 youtube 页面获取视频的 url。

例如,给定 url:http://www.youtube.com/watch?v=5qcmCUsw4EQ&feature=g-all-u&context=G2633db8FAAAAAAAAAAA

  1. 我需要将视频下载为 flv 或任何其他格式。我还需要能够以多种质量下载它。
  2. 我尝试了几个脚本,例如 youtube-dl 和 quvi,但它们都给出错误并且不起作用。请帮忙。将不胜感激。

【问题讨论】:

  • 作为 youtube-dl 的开发者,我很想知道它是如何不工作的。随时 report an issue 或通过 youtube-dl tag 询问 stackoverflow 问题。
  • 什么错误?他们怎么不工作?
  • quvi 给出这个错误:错误:/usr/share/quvi/lua/website/youtube.lua:117:不匹配:fmt_url_map
  • 我在我的 ubuntu 安装中从存储库安装了 youtube-dl,但它给出了错误。运行“youtube-dl -U”后它正在工作。我猜 repos 有旧版本的 youtube-dl

标签: python video youtube


【解决方案1】:

您需要解析包含视频的<embed> 标记的flashvars 变量。这些会发生变化,因此可能需要进行一些实验才能找到当前的变量名称。粗略地说,您需要使用像mechanize 这样的库来获取页面的HTML,并使用BeautifulSoup 来解析HTML 并提取<embed> 元素的flashvars 字段。然后查看变量以确定哪个变量包含视频 URL。

例如,

  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]

【讨论】:

  • 这不再有效...soup.find('embed') 返回 None,因为 <embed> 不在 html 中(obvi)。但是,当我打印出汤并将其加载到浏览器中时,我可以找到嵌入元素。我想这是因为浏览器做了某种onload() 的东西来加载embed el。有什么想法可以用机械化模拟这个onload
  • YouTube 一直在不断改变他们嵌入视频的方式,正是为了阻止这样的事情。 JWZ 最近一直在发帖 (jwz.org/blog/2013/08/another-day-another-cipher-change-2),您可能会觉得很有启发性(请参阅底部的“以前”链接了解更多信息)
  • 但是如果你想模拟,那么你也可以使用 selenium
猜你喜欢
  • 2021-10-06
  • 2018-07-16
  • 1970-01-01
  • 2015-09-18
  • 1970-01-01
  • 2023-03-09
  • 2011-01-30
  • 1970-01-01
  • 2011-10-31
相关资源
最近更新 更多