2017-06-01 16 views
-1

我想从需要登录的站点使用youtube-dl下载多个文件。Python - youtube-dl强制每次登录

我遇到的问题是,youtube-dl是登录第一个没有问题的视频,但不会再次登录下一个视频。

如何在每次调用函数时强制youtube-dl登录每个视频?也许重置,每次停止youtube-dl。

def video_download(path, url): 

     ydl = youtube_dl.YoutubeDL(
      { 
       'outtmpl': path + '.mp4', 
       'format': 'bestvideo+bestaudio/best', 
       'username': email, 
       'password': password, 
       # 'quiet': True 

      }) 

     with ydl: 
      ydl.download([url]) 
     time.sleep(45) 

该函数实际上是在循环中调用的,因为我为每个文件/视频设置了outtmpl。

不同的情况下,第一个工作,下一个不要再次登录。 我需要每次登录时重复。

<youtube_dl.YoutubeDL.YoutubeDL object at 0x0000000004E74C18> 
<youtube_dl.YoutubeDL.YoutubeDL object at 0x00000000032BED68> 
WARNING: Unable to download kaltura session JSON: HTTP Error 401: UNAUTHORIZED 
<youtube_dl.YoutubeDL.YoutubeDL object at 0x0000000004D6D898> 
WARNING: Unable to download kaltura session JSON: HTTP Error 401: UNAUTHORIZED 

Terminal/Output: 

<youtube_dl.YoutubeDL.YoutubeDL object at 0x00000000050E4C18> 
**[safari] Downloading login form 
[safari] Login successful** 
[safari] 9781787283664/video1_1: Downloading webpage 
............................. 
<youtube_dl.YoutubeDL.YoutubeDL object at 0x000000000337DD68> 
[safari] 9781787283664/video1_2: Downloading webpage 
[safari] 9781787283664/video1_2: Downloading kaltura session JSON 
WARNING: Unable to download kaltura session JSON: HTTP Error 401: UNAUTHORIZED 

----更新---

我尝试使用命令行,但我有以下错误,如果我使用Python进口未出现:

错误:固定输出的名字,但多个文件下载

的CMD:

youtube-dl -u username_paceholder -p password_paceholder -o 'D:\DevProj\DownloadCourses\Safari\x_downloads\Django1 \_01_Django ABC' https://www.site_placeholder.com/library/view/django-example/9781787283664/video1_2.html 
+0

您提供的链接是播放列表链接? –

+0

没有。我只是想从一个注册站点一个接一个地下载文件(来设置位置和标题),但是youtube-dl只记录第一个文件,而不是其他文件。因为这我收到以下文件授权错误 – user3541631

+0

@ user3541631嗨,请检查我的最新答案 – Wboy

回答

1

为什么不使用命令行?

您可以个性化的文件名和文件夹位置 - 你一定会认为认证将每次运行youtube-dl命令(如果-u-p给出参数)的时间

试着这么做来完成:

import os 

def video_download(path="c:\\mydir\\myfile", url="http://myvideo./url"): 

    #user information 
    user="myuser" 
    pwd="mypwd" 

    #build cmd line 
    cmd="youtube-dl -u "+user+" -p "+pwd+' -o "'+path+'" '+url 

    #execute commande line 
    os.system(cmd) 

    [...] 
+0

@A Stefani请参阅我更新的问题以及cmd问题 – user3541631

+0

您是否在引用文件名时尝试使用双引号char(“)而不是简单引号(')char,因为您在windows下执行代码也需要转义文件路径中的所有(\)...之前的文件路径:'D:\ DevProj \ DownloadCourses \ Safari \ ...'变为“D:\\ DevProj \\ DownloadCourses \\ Safari \\ ...” –

+0

从https: //pythonconquerstheuniverse.wordpress。com/2008/06/04/gotcha-%E2%80%94-backslashes-in-windows-filenames/windows下文件名的最佳方法:诀窍是使用正斜杠输入所有文件名字符串,然后让操作系统通过这种方式,.path.normpath()将它们更改为反斜杠。 –

0

我假设由于您需要多个视频,因此您的网址参数将采用['url1','url2','url3']等列表的形式。如果是这种情况,您应该可以使用for循环遍历每个元素,并在每个元素上调用下载函数。

def video_download(path, url): 

    ydl = youtube_dl.YoutubeDL(
     { 
      'outtmpl': path + '.mp4', 
      'format': 'bestvideo+bestaudio/best', 
      'username': email, 
      'password': password, 
      'cachedir': False, 
      'noplaylist': True 
      # 'quiet': True 
     }) 

    for i in url: 
     ydl.download(i) 

这个工具还有一个命令行版本,我使用它,非常方便。

+0

该函数实际上被称为一个循环,因为我为每个文件/视频设置outtmpl 。看到我有路径和网址作为参数,所以我不需要与我。见上面我更新了这个问题。 – user3541631