2017-06-01 14 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