You are currently viewing Python | Программа для загрузки полного списка воспроизведения Youtube

Python | Программа для загрузки полного списка воспроизведения Youtube

Python является универсальным языком программирования и широко используется для написания сценариев небольших задач. Давайте посмотрим, как создать свой собственный загрузчик плейлистов Youtube с помощью Python. Хотя на рынке доступно много программного обеспечения, но создание собственного, служащего этой цели, — это довольно познавательно и впечатляюще.

Необходимые модули:

  • BeautifulSoup bs4
  • PyQt5
  • PyQtWebEngine
  • module sys
  • module urllib
  • module pytube

Как работает ли это? 

Из указанного URL плейлиста YouTube наша программа выполнит веб-скрейпинг, соберет все ссылки на видео YouTube и добавит их в массив ссылок. Затем, используя pytube библиотека мы загрузим соответствующие видео на YouTube по ссылке в массиве ссылок. Параметры для загрузки видео YouTube (качество, тип mime_type и т. д.) Можно указать в конструкторе потоков. Видео будут загружены с именем исходного видео.

Давайте посмотрим код:

# 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)

Выход: