下載 Youtube 清單中所有影片
這篇文章會介紹使用 Python 的 pytube 第三方函式庫,讀取 Youtube 清單內容,並將清單裡的所有影片下載為 mp4。
本篇使用的 Python 版本為 3.7.12,所有範例可使用 Google Colab 實作,不用安裝任何軟體 ( 參考:使用 Google Colab )
安裝 pytube
輸入下列指令,安裝 pytube ( 根據個人環境使用 pip、pip3 )
!pip install pytube
注意,原本 pytube 可以正常使用,但因為 Youtube API 更新安全性原則,所以原本程式碼都需要加入下面這段 ssl,不然就會拋出錯誤訊息:
import ssl
ssl._create_default_https_context = ssl._create_stdlib_context
讀取 Youtube 清單資訊
參考「pytube - Using Playlists」說明,使用 pytube 讀取 Youtube 清單網址後,就能將該影片清單的所有影片網址,輸出成為串列。
import ssl
ssl._create_default_https_context = ssl._create_stdlib_context
import os
os.chdir('/content/drive/MyDrive/Colab Notebooks') # 使用 Colab 要換路徑使用
from pytube import Playlist
playlist = Playlist('https://www.youtube.com/watch?v=mOPRaLPh-YU&list=PL9ACDjBMkp9wViVmgpYweGkNqh62pHspF')
# 讀取影片清單
print(playlist.video_urls) # 印出清單結果
'''
['https://www.youtube.com/watch?v=mOPRaLPh-YU',
'https://www.youtube.com/watch?v=wARhTJH1fJI',
'https://www.youtube.com/watch?v=WLjePGUCRqc']
'''
下載 Youtube 清單中所有影片為 mp4
參考「下載 Youtube 影片 ( mp4、mp3、字幕 )」文章,讀取到影片清單中所有影片網址後,透過 for 迴圈,就能將所有影片下載為 mp4。
import ssl
ssl._create_default_https_context = ssl._create_stdlib_context
import os
os.chdir('/content/drive/MyDrive/Colab Notebooks') # 使用 Colab 要換路徑使用
from pytube import Playlist, YouTube
playlist = Playlist('https://www.youtube.com/watch?v=mOPRaLPh-YU&list=PL9ACDjBMkp9wViVmgpYweGkNqh62pHspF')
print('download...')
for i in playlist.video_urls:
print(i)
yt = YouTube(i) # 讀取影片
yt.streams.filter().get_highest_resolution().download() # 下載為最高畫質影片
print('ok!')
如果有出現「pytube.exceptions.AgeRestrictedError:XXXXXXXXX is age restricted, and can't be accessed without logging in.
」的錯誤情況,這可能是 pytube 的 bug 造成,參考「stackoverflow」的解決方法,在開頭加上下面這段程式碼就能解決。
from pytube.innertube import _default_clients
_default_clients["ANDROID_MUSIC"] = _default_clients["ANDROID_CREATOR"]
參考資料
意見回饋
如果有任何建議或問題,可傳送「意見表單」給我,謝謝~