【问题标题】:Download video from URL in Python在 Python 中从 URL 下载视频
【发布时间】:2015-09-06 07:40:38
【问题描述】:

我正在尝试使用以下 Python 代码下载视频。

import urllib
dwn_link = 'https://class.coursera.org/textanalytics-001/lecture/download.mp4?lecture_id=73'

file_name = 'trial_video.mp4' 
urllib.retrieve(dwn_link, file_name)

但此代码仅下载 382 kb 并且视频打开时出错。

有什么帮助吗?

编辑:我可以使用他们的下载链接下载此页面中的所有 .pdf 文件,但视频文件似乎存在一些问题。视频确实下载到我的本地系统中,但出现错误

【问题讨论】:

  • 网站是否需要您登录才能访问视频?
  • 你知道有一个应用程序可以为你做这件事吗? play.google.com/store/apps/…itunes.apple.com/ie/app/coursera/id736535961?mt=8
  • @PatrickRoberts 我已经登录到 coursera。
  • urllib.retrieve(dwn_link, file_name) 应该是 urllib.urlretrieve(dwn_link, file_name)
  • @user3035935 Python 没有浏览器的凭据。您必须在代码中手动设置 HTTP 标头。

标签: python download


【解决方案1】:

要从 Coursera 课程下载该视频,您需要:

  1. 登录 Coursera.org 的会话
  2. 在 Coursera.org 上注册了该课程

完成此操作后,您可以在 HTTP 客户端通过身份验证(使用您的用户名/密码)并具有有效会话后下载视频。

【讨论】:

  • 代码中的 dwn_link 变量是需要的url。我在运行此代码时已登录 Coursera 会话
【解决方案2】:

如果您有权访问 urllib2 ,您可以在 url 上使用 urlopen ,这将返回一个 response 对象,您可以将 response.read() 执行到 read 数据然后写入到一个文件。

例子-

import urllib2
dwn_link = 'https://class.coursera.org/textanalytics-001/lecture/download.mp4?lecture_id=73'

file_name = 'trial_video.mp4' 
rsp = urllib2.urlopen(dwn_link)
with open(file_name,'wb') as f:
    f.write(rsp.read())

如果下载视频需要,您还需要确保您已通过服务器身份验证。

我不确定coursera.org 使用什么样的身份验证,但如果它的基本 HTTP 身份验证(我非常怀疑),你可以使用 -

password_mgr = urllib2.HTTPPasswordMgrWithDefaultRealm()
top_level_url = "http://class.coursera.org/"
password_mgr.add_password(None, top_level_url, username, password)

handler = urllib2.HTTPBasicAuthHandler(password_mgr)

# create "opener" (OpenerDirector instance)
opener = urllib2.build_opener(handler)

# use the opener to fetch a URL
opener.open(dwn_link)

【讨论】:

  • urllib2 在输出方面的行为与 urllib 完全相同。您能否指定哪个库有 password_mgr 对象?我想试试这个。
  • 抱歉,没注意到 password_mgr 没有初始化,我已经更新了代码,它的 password_mgr = urllib2.HTTPPasswordMgrWithDefaultRealm()
  • 我在代码末尾添加了以下命令: rsp = opener.open(dwn_link) with open(file_name,'wb') as f: f.write(rsp.read()) 不幸的是,输出还是一样的。文件大小为 382 kb。
【解决方案3】:

在 python 3 中,

import urllib.request
urllib.request.urlretrieve(url_link, 'video_name.mp4') 

它对我有用,你可以在下面的link看到脚本

【讨论】:

【解决方案4】:

您可以使用库请求:

def download_video_series(video_links): 

for link in video_links: 

    '''iterate through all links in video_links 
    and download them one by one'''

    # obtain filename by splitting url and getting  
    # last string 
    file_name = link.split('/')[-1]    

    print "Downloading file:%s"%file_name 

    # create response object 
    r = requests.get(link, stream = True) 

    # download started 
    with open(file_name, 'wb') as f: 
        for chunk in r.iter_content(chunk_size = 1024*1024): 
            if chunk: 
                f.write(chunk) 

    print "%s downloaded!\n"%file_name 

print "All videos downloaded!"
return

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-12-04
    • 2019-02-22
    • 1970-01-01
    • 1970-01-01
    • 2018-06-10
    • 1970-01-01
    • 2022-06-30
    相关资源
    最近更新 更多