Python | Program to download complete Youtube playlist

Python is a multi-purpose programming language and widely used for scripting small tasks. Let’s see how to make your own Youtube Playlist Downloader using Python. Though there are many software available in market but making your own serving that purpose is quite a learning and impressive as well.

Modules needed –

BeautifulSoup bs4
PyQt5
sys module
urllib module
pytube module

How it works ?
From the given URL of a YouTube playlist, our program will perform web scraping and fetch all the YouTube video links and append it under a links array. Then using the pytube library we will download the corresponding YouTube videos from the link in the links array. The parameters for downloading the YouTube video (quality, mime_type, etc) can be specified in streams constructor. The videos will be downloaded with the name of the original video.



Let’s see the code:

filter_none

edit
close

play_arrow

link
brightness_4
code

# Importing libraries
import bs4 as bs
import sys
import urllib.request
from PyQt5.QtWebEngineWidgets import QWebEnginePage
from PyQt5.QtWidgets import QApplication
from PyQt5.QtCore import QUrl
import pytube # library for downloading youtube videos
  
  
class Page(QWebEnginePage):
    def __init__(self, url):
        self.app = QApplication(sys.argv)
        QWebEnginePage.__init__(self)
        self.html = ''
        self.loadFinished.connect(self._on_load_finished)
        self.load(QUrl(url))
        self.app.exec_()
  
    def _on_load_finished(self):
        self.html = self.toHtml(self.Callable)
        print('Load finished')
  
    def Callable(self, html_str):
        self.html = html_str
        self.app.quit()
  
  
links = []
  
  
def exact_link(link):
    vid_id = link.split('=')
    # print(vid_id)
    str = ""
    for i in vid_id[0:2]:
        str += i + "="
  
    str_new = str[0:len(str) - 1]
    index = str_new.find("&")
  
    new_link = "https://www.youtube.com" + str_new[0:index]
    return new_link
  
  
# Scraping and extracting the video
# links from the given playlist url
page = Page(url)
count = 0
  
soup = bs.BeautifulSoup(page.html, 'html.parser')
for link in soup.find_all('a', id='thumbnail'):
      
    # not using first link because it is
    # playlist link not particular video link
    if count == 0
        count += 1
        continue
    else:
        vid_src = link['href']
        # print(vid_src)
        # keeping the format of link to be
        # given to pytube otherwise in some cases
        new_link = exact_link(vid_src) 
          
        # error might occur due to this
        # print(new_link)
          
        # appending the link to the links array
        links.append(new_link) 
  
# print(links)
  
# downloading each video from
# the link in the links array
for link in links: 
    yt = pytube.YouTube(link)
      
    # Downloaded video will be the best quality video
    stream = yt.streams.filter(progressive=True,
                file_extension='mp4').order_by(
                'resolution').desc().first() 
    try:
        stream.download()
        # printing the links downloaded
        print("Downloaded: ", link) 
    except:
        print('Some error in downloading: ', link)

chevron_right


Output:



My Personal Notes arrow_drop_up

Competitive Programmer, Full Stack Developer, Technical Content Writer, Machine Learner

If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.




Article Tags :

1


Please write to us at contribute@geeksforgeeks.org to report any issue with the above content.