Python es un lenguaje de programación multipropósito y se usa ampliamente para crear scripts de tareas pequeñas. Veamos cómo hacer tu propio descargador de listas de reproducción de Youtube usando Python. Aunque hay muchos programas disponibles en el mercado, hacer uno propio para ese propósito es también un aprendizaje e impresionante.
Módulos necesarios:
- Hermosa Sopa bs4
- PyQt5
- PyQtWebEngine
- módulo de sistema
- módulo urllib
- modulo pytube
¿Cómo funciona ?
A partir de la URL dada de una lista de reproducción de YouTube, nuestro programa realizará un web scraping y obtendrá todos los enlaces de video de YouTube y los agregará en una array de enlaces. Luego, utilizando la biblioteca de pytube , descargaremos los videos de YouTube correspondientes desde el enlace en la array de enlaces. Los parámetros para descargar el video de YouTube (calidad, mime_type, etc.) se pueden especificar en el constructor de secuencias. Los videos se descargarán con el nombre del video original.
Veamos el código:
Python3
# 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 url = "https://www.youtube.com/watch?v=lcJzw0JGfeE&list=PLqM7alHXFySENpNgw27MzGxLzNJuC_Kdj" # 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: 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 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)
Producción: