Для работы с youtube установим через менеджер пакетов pip пакет pytube с помощью следующей команды:
pip install pytube
Для обращения к определенному видео на youtube необходимо создать объекта YouTube, в конструктор которого передается ссылка на видео:
from pytube import YouTube # ссылка на загружаемое видео link = "https://www.youtube.com/watch?v=J0Aq44Pze-w" yt = YouTube(link)
С помощью атрибута streams можно получить все стримы, связанные с этим видео (в том числе отдельно его аудиодорожки), и их параметры:
from pytube import YouTube # ссылка на загружаемое видео link = "https://www.youtube.com/watch?v=J0Aq44Pze-w" yt = YouTube(link) print(yt.streams)
Примерный вывод:
[<Stream: itag="17" mime_type="video/3gpp" res="144p" fps="12fps" vcodec="mp4v.20.3" acodec="mp4a.40.2" progressive="True" type="video">, <Stream: itag="18" mime_type="video/mp4" res="360p" fps="24fps" vcodec="avc1.42001E" acodec="mp4a.40.2" progressive="True" type="video">, <Stream: itag="22" mime_type="video/mp4" res="720p" fps="24fps" vcodec="avc1.64001F" acodec="mp4a.40.2" progressive="True" type="video">, ................................. <Stream: itag="251" mime_type="audio/webm" abr="160kbps" acodec="opus" progressive="False" type="audio">]
Для загрузки видео нам надо выбрать конкретный стрим из полученного списка и вызвать у него метод download(). Например, выберем и загрузим первый стрим:
from pytube import YouTube link = "https://www.youtube.com/watch?v=J0Aq44Pze-w" yt = YouTube(link) yt.streams.first().download() print("Видео успешно загружено")
При этом мы можем загрузить разные варианты видео. Для выбора видео в наилучшем расширении библиотека предоставляет специальный метод get_highest_resolution():
YouTube("https://www.youtube.com/watch?v=J0Aq44Pze-w").streams.get_highest_resolution().download()
Для получения информации о субтитрах класс YouTube предоставляет атрибут captions, который предоставляет словарь объектов Caption, фактически список доступных субтитров:
from pytube import YouTube link = "https://www.youtube.com/watch?v=bDo18m-uOi8" yt = YouTube(link) print(yt.captions)
В данном случае мы получим информацию о субтитрах в следующем виде:
{'en': <Caption lang="English" code="en">, 'a.en': <Caption lang="English (auto-generated)" code="a.en">, 'pt-BR': <Caption lang="Portuguese (Brazil)" code="pt-BR">, 'ru': <Caption lang="Russian" code="ru">, 'es-MX': <Caption lang="Spanish (Mexico)" code="es-MX">}
В полученном словаре ключ представляет языковую культуру, например, "pt-BR" (бразильский португальский) или "en" (общий английский). Для автосгенерированных субтитров код языка предваряется символом "a", например, "a.en". Значение ключа дублируется в атрибуте "code" объекта Caption.
Для загрузки субтитров применяется у Caption применяется метод download(), например, загрузим субтитры для английского языка:
from pytube import YouTube yt = YouTube("https://www.youtube.com/watch?v=bDo18m-uOi8") yt.captions["en"].download(title="Python", srt=False) print("Субтитры загружены")
В метод download()
передаются два параметра. Параметр title
представляет название файла, в который будут сохраняться субтитры. Второй параметр -
srt
указывает, в каком формате загружать субтитры: если равно True
, то загружаются в формате srt, если False
- в формате xml.
Для взаимодействия с плейлистами библиотека предоставляет класс Playlist:
from pytube import Playlist
Для создания объекта Playlist в конструктор класса надо передать ссылку на плейлист:
playlist = Playlist("https://www.youtube.com/playlist?list=PLlrxD0HtieHhS8VzuMCfQD4uJ9yne1mE6")
Все видео из плейлиста мы можем получить с помощью атрибута videos, которое представляет список Stream. Например, загрузим все видео из плейлиста:
from pytube import Playlist playlist = Playlist("https://www.youtube.com/playlist?list=PLlrxD0HtieHhS8VzuMCfQD4uJ9yne1mE6") print(f"Загрузка плейлиста: {playlist.title}") for video in playlist.videos: video.streams.first().download() print(f"Видео {video.title} загружено")
С помощью атрибута video_urls можно получить все ссылки на видео в плейлисте:
from pytube import Playlist playlist = Playlist("https://www.youtube.com/playlist?list=PLlrxD0HtieHhS8VzuMCfQD4uJ9yne1mE6") for url in playlist.video_urls: print(url)