Python | Program to download complete Youtube playlist

18 Aug, 2021
Python is a multi-purpose programming language and is 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 the market but making your own serving that purpose is quite a learning and impressive as well. 
Modules needed:
BeautifulSoup bs4
PyQt5
PyQtWebEngine
sys module
urllib module
pytube module
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 the streams constructor. The videos will be downloaded with the name of the original video.  
Let’s see the code: 
Python3
# Importing librariesimport bs4 as bsimport sysimport urllib.requestfrom PyQt5.QtWebEngineWidgets import QWebEnginePagefrom PyQt5.QtWidgets import QApplicationfrom PyQt5.QtCore import QUrlimport 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  url = "https://www.youtube.com/watch?v=lcJzw0JGfeE&list=PLqM7alHXFySENpNgw27MzGxLzNJuC_Kdj"# Scraping and extracting the video# links from the given playlist urlpage = 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:        try:              # Prevents error for links with no href.            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)        except Exception as exp:            pass # No function necessary for invalid <a> tags. # print(links) # downloading each video from# the link in the links arrayfor 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)
Output:  
 
ronakjalan98
python-utility
Python
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.
Python Dictionary
Different ways to create Pandas Dataframe
Enumerate() in Python
Read a file line by line in Python
Python String | replace()
How to Install PIP on Windows ?
*args and **kwargs in Python
Python Classes and Objects
Iterate over a list in Python
Python OOPs Concepts