Скачиваем видео с YouTube с помощью Python, без использования pytube

Спасибо. Скрипт работает - но очень медленно.

К сожалению да. Но тут нужно учесть, что со времени написания скрипта изменился код на самом Ютубе. Даже те качалки, которые раньше работали на ура не всегда справляются с загрузкой видео с первого захода. Потому, нужно в данном контексте рассмотреть, возможно, другие варианты получения видео. С Ютубом почти всегда так. Насколько я знаю, даже те библиотеки, которые заточены на скачивание видео, например, pytube, иногда перестают работать после изменения кода. И приходиться ждать когда разработчики внесут необходимые правки, насколько это возможно.
 
  • Нравится
Реакции: satfan
К сожалению да. Но тут нужно учесть, что со времени написания скрипта изменился код на самом Ютубе. Даже те качалки, которые раньше работали на ура не всегда справляются с загрузкой видео с первого захода. Потому, нужно в данном контексте рассмотреть, возможно, другие варианты получения видео. С Ютубом почти всегда так. Насколько я знаю, даже те библиотеки, которые заточены на скачивание видео, например, pytube, иногда перестают работать после изменения кода. И приходиться ждать когда разработчики внесут необходимые правки, насколько это возможно.
 
Спасибо за ответ.
Поставил расширение в гооогле хром: IDM Integration Module (Скачивание файлов с использованием Internet Download Manager) -- всё летает и можно выбрать качество.
 
Спасибо за ответ.
Поставил расширение в гооогле хром: IDM Integration Module (Скачивание файлов с использованием Internet Download Manager) -- всё летает и можно выбрать качество.
Вы не смогли бы написать скрипт для скачивания видео с и с рутубе ?
 
Вы не смогли бы написать скрипт для скачивания видео с и с рутубе ?

Я как-то пытался. Но Дзен видео хорошо прячет. Пока что не удалось реализовать. Может быть в будущем, как руки дойдут ))
 
  • Нравится
Реакции: satfan
Спасибо. А с рутуба -- можно сделать ?

Здесь есть статья про скачивание видео с Rutube. Если у них не изменился код, должно все работать. Но с момента написания статьи - не проверял. Это было еще до того, как их За DDoSили. Потому не знаю. Если интересно, можете проверить. Вот ссылка на статью: Статья - Скачиваем видео с Rutube с помощью Python
 
  • Нравится
Реакции: satfan
Здесь есть статья про скачивание видео с Rutube. Если у них не изменился код, должно все работать. Но с момента написания статьи - не проверял. Это было еще до того, как их За DDoSили. Потому не знаю. Если интересно, можете проверить. Вот ссылка на статью: Статья - Скачиваем видео с Rutube с помощью Python
Спасибо. Я только начал учить питон. Небольшой вопрос: Есть работающий скрипт
Python:
import os

path = 'E:\Мой Python\__Видеокурсы Python'
rez = sorted(os.listdir(path))
with open("out_ok.txt", "w") as file:
    for n, item in enumerate(rez):
        file.write(f"{n + 1} {item}\n")
print('Список файлов смотрим здесь - out_ok.txt ')

# поиск перечня файлов в папке и запись списка в out_ok.txt
Как в него добавить размер каждого файла в Мб в каждую строку ?
Есть пример но он мне не совсем подходит :
Python:
import os
 
# Имя каталога, из которого
# мы собираемся извлечь наши файлы с учетом их размера
path = 'E:\Мой Python\__Видеокурсы Python'
 
# Получить список всех файлов только в данном каталоге
fun = lambda x : os.path.isfile(os.path.join(path,x))
files_list = filter(fun, os.listdir(path))
 
# Создайте список файлов в каталоге вместе с размером
size_of_file = [
    (f,os.stat(os.path.join(path, f)).st_size)
    for f in files_list
]
# Выполните итерацию по списку файлов вместе с размером
# и распечатайте их один за другим.
for f,s in size_of_file:
    print("{} : {}MB".format(f, round(s/(1024*1024),3)))
 
Спасибо. Я только начал учить питон. Небольшой вопрос: Есть работающий скрипт
Python:
import os

path = 'E:\Мой Python\__Видеокурсы Python'
rez = sorted(os.listdir(path))
with open("out_ok.txt", "w") as file:
    for n, item in enumerate(rez):
        file.write(f"{n + 1} {item}\n")
print('Список файлов смотрим здесь - out_ok.txt ')

# поиск перечня файлов в папке и запись списка в out_ok.txt
Как в него добавить размер каждого файла в Мб в каждую строку ?
Есть пример но он мне не совсем подходит :
Python:
import os
 
# Имя каталога, из которого
# мы собираемся извлечь наши файлы с учетом их размера
path = 'E:\Мой Python\__Видеокурсы Python'
 
# Получить список всех файлов только в данном каталоге
fun = lambda x : os.path.isfile(os.path.join(path,x))
files_list = filter(fun, os.listdir(path))
 
# Создайте список файлов в каталоге вместе с размером
size_of_file = [
    (f,os.stat(os.path.join(path, f)).st_size)
    for f in files_list
]
# Выполните итерацию по списку файлов вместе с размером
# и распечатайте их один за другим.
for f,s in size_of_file:
    print("{} : {}MB".format(f, round(s/(1024*1024),3)))

Можно сделать так:

Python:
import os


def correct_size(bts, ending='iB'):
    size = 1024
    for item in ["", "K", "M", "G", "T", "P"]:
        if bts < size:
            return f"{bts:.2f} {item}{ending}"
        bts /= size


path = 'E:\Мой Python\__Видеокурсы Python'
rez = sorted(os.listdir(path))
with open("out_ok.txt", "w") as file:
    for n, item in enumerate(rez):
        size = correct_size(os.stat(os.path.join(path, item)).st_size)
        file.write(f"{n + 1} {item} - {size}\n")
print('Список файлов смотрим здесь - out_ok.txt ')

В данном примере добавилась функция correct_size, для того, чтобы выводить размер файлов в понятном формате, то есть в Мб, Гб и др. Ну и с помощью вот этой вот строки:

size = correct_size(os.stat(os.path.join(path, item)).st_size)

Собирается путь к файлу, считывается информация и забирается его размер. Который потом передается в функцию для коррекции.
Нужно учитывать то, что размер директорий в данном случае будет отображен неверно. То есть, будет показан размер папок как объектов, но не самого содержимого этих папок. Если такие есть у тебя в директории.

По сути, то же самое, что у тебя в коде. Только делается все не в одной функции. Ну и у тебя в коде фильтруются объекты в сканируемой директории на папки и файлы. Что правильно, так как с помощью данного кода размер папки не получить.
 
Последнее редактирование:
  • Нравится
Реакции: satfan
Можно сделать так:

Python:
import os


def correct_size(bts, ending='iB'):
    size = 1024
    for item in ["", "K", "M", "G", "T", "P"]:
        if bts < size:
            return f"{bts:.2f} {item}{ending}"
        bts /= size


path = 'E:\Мой Python\__Видеокурсы Python'
rez = sorted(os.listdir(path))
with open("out_ok.txt", "w") as file:
    for n, item in enumerate(rez):
        size = correct_size(os.stat(os.path.join(path, item)).st_size)
        file.write(f"{n + 1} {item} - {size}\n")
print('Список файлов смотрим здесь - out_ok.txt ')

В данном примере добавилась функция correct_size, для того, чтобы выводить размер файлов в понятном формате, то есть в Мб, Гб и др. Ну и с помощью вот этой вот строки:

size = correct_size(os.stat(os.path.join(path, item)).st_size)

Собирается путь к файлу, считывается информация и забирается его размер. Который потом передается в функцию для коррекции.
Нужно учитывать то, что размер директорий в данном случае будет отображен неверно. То есть, будет показан размер папок как объектов, но не самого содержимого этих папок. Если такие есть у тебя в директории.
Спасибо. Скрипт работает. Только выводит в строках не в Мб.
Вот пример строки:
4 02_Курс программирования на Python 3.6 - 4.00 KiB
 
Спасибо. Скрипт работает. Только выводит в строках не в Мб.
Вот пример строки:
4 02_Курс программирования на Python 3.6 - 4.00 KiB

Ну так я и говорил про папки, что их размер будет выводиться неправильно. Будет выводиться размер папки как объекта. А не ее содержимого. Когда ты смотришь размер папки в проводнике, ты видишь размер уже с учетом содержимого. Здесь же нет. Здесь чистый размер папки.

Если тебе надо получить размер каждого файла в папке, тогда тебе нужно использовать не функцию listdir, а функцию walk. Она возвращает все объекты из вложенных директорий рекурсивно.
 
  • Нравится
Реакции: satfan
Ну так я и говорил про папки, что их размер будет выводиться неправильно. Будет выводиться размер папки как объекта. А не ее содержимого. Когда ты смотришь размер папки в проводнике, ты видишь размер уже с учетом содержимого. Здесь же нет. Здесь чистый размер папки.

Если тебе надо получить размер каждого файла в папке, тогда тебе нужно использовать не функцию listdir, а функцию walk. Она возвращает все объекты из вложенных директорий рекурсивно.
Спасибо за помощь Johan Van. Вы олично знаете Python, а я только начал. Может вам что нужно:
1. Есть пратически все книги по Python
2. Куча видео курсов
3. Прога для скачивания с ютуба (искал креченую 2 дня)
Но это всё толлька Вам в личку .
 
Спасибо за помощь Johan Van. Вы олично знаете Python, а я только начал. Может вам что нужно:
1. Есть пратически все книги по Python
2. Куча видео курсов
3. Прога для скачивания с ютуба (искал креченую 2 дня)
Но это всё толлька Вам в личку .

Спасибо за предложение ))) У меня в данный момент в библиотеке 752 книги только по тегу python. На русском и английском языках, разных годов и издательств. В начале, перед тем как изучать питона я тоже озаботился скачиванием доступной литературы. Да и сейчас иногда докачиваю то, чего нет в библиотеке. Пользуюсь для структурирования calibre. По поводу курсов.... около 29 курсов из тех, что я пока еще не смотрел чисто по питону, 15 курсов по парсингу, ну и что-то есть в разделе безопасность ))
 
  • Нравится
Реакции: satfan
Спасибо за помощь Johan Van. Вы олично знаете Python, а я только начал. Может вам что нужно:
1. Есть пратически все книги по Python
2. Куча видео курсов
3. Прога для скачивания с ютуба (искал креченую 2 дня)
Но это всё толлька Вам в личку .

А по поводу проги... тут все просто, если именно для винды. Есть сайт такой, интересный, не особо от кого-то скрывающийся: rsload.net. Там можно найти кучу всего. Единственный его минус в том, что без оплаты доступа скачивание ограничено по скорости. Но, если очень надо, можно и подождать.
 
Спасибо за предложение ))) У меня в данный момент в библиотеке 752 книги только по тегу python. На русском и английском языках, разных годов и издательств. В начале, перед тем как изучать питона я тоже озаботился скачиванием доступной литературы. Да и сейчас иногда докачиваю то, чего нет в библиотеке. Пользуюсь для структурирования calibre. По поводу курсов.... около 29 курсов из тех, что я пока еще не смотрел чисто по питону, 15 курсов по парсингу, ну и что-то есть в разделе безопасность ))
Ещё вопрос. Прграмма - бесплатный VPN - что посоветуете ?
 
Ещё вопрос. Прграмма - бесплатный VPN - что посоветуете ?

По поводу размера директорий. Можно попробовать использовать вот такой код:

Python:
from os import stat, path, walk, listdir
from sys import exit as ex


def correct_size(bts: int, ending='iB') -> str:
    """
    Корректируется размер файла.
    :param bts: размер файла, целое число.
    :param ending: суффикс, добавляемый к метрике.
    :return: строка, корректированный размер файла.
    """
    size = 1024
    for item in ["", "K", "M", "G", "T", "P"]:
        if bts < size:
            return f"{bts:.2f} {item}{ending}"
        bts /= size


def folder_scan(path_dir: str) -> str:
    """
    Определение размера директории. Сканируется директория.
    Определяется размер каждого файла находящегося в ней.
    Суммируется в общей переменной. После завершения сканирования
    возвращается скорректированный размер.
    :param path_dir: строка, путь к директории для сканирования.
    :return: строка, скорректированный размер файла.
    """
    file_size = stat(path_dir).st_size
    for root, dirs, files in walk(path_dir):
        for file in files:
            file_size = file_size + stat(path.join(root, file)).st_size
    return correct_size(file_size)


def list_dir(path_dir: str):
    """
    Сканирование директории. Определение размера файлов и папок.
    Добавление данных об имени и размере в текстовый документ.
    Сортировка полученных объектов на файлы и папки в процессе
    итерации по ним. Если файл, определяем размер сразу. Если папка,
    передаем путь к ней в функцию получения размера папки.
    :param path_dir: строка, путь к директории для сканирования.
    """
    rez = sorted(listdir(path_dir))
    with open("out_ok.txt", "w") as file:
        for n, item in enumerate(rez):
            if path.isdir(path.join(path_dir, item)):
                size = folder_scan(path.join(path_dir, item))
            else:
                size = correct_size(stat(path.join(path_dir, item)).st_size)
            file.write(f"{n + 1} {item} - {size}\n")
    print('Список файлов смотрим здесь - out_ok.txt ')


def main():
    """
    Запрос у пользователя пути к сканируемой директории.
    Запуск функции сканирования с передачей в нее
    полученного от пользователя пути.
    """
    path_dir = input("Введите путь к сканируемой директории: ")
    if not path.exists(path_dir):
        print("Введенной вами директории не существует.")
        ex(0)
    list_dir(path_dir)


if __name__ == "__main__":
    main()

Здесь нужно учесть, что будут возвращаться размеры директорий именно верхнего уровня. Того, до которого может дотянуться listdir, а именно, размер папок в сканируемой директории.
 
  • Нравится
Реакции: satfan
По поводу размера директорий. Можно попробовать использовать вот такой код:

Python:
from os import stat, path, walk, listdir
from sys import exit as ex


def correct_size(bts: int, ending='iB') -> str:
    """
    Корректируется размер файла.
    :param bts: размер файла, целое число.
    :param ending: суффикс, добавляемый к метрике.
    :return: строка, корректированный размер файла.
    """
    size = 1024
    for item in ["", "K", "M", "G", "T", "P"]:
        if bts < size:
            return f"{bts:.2f} {item}{ending}"
        bts /= size


def folder_scan(path_dir: str) -> str:
    """
    Определение размера директории. Сканируется директория.
    Определяется размер каждого файла находящегося в ней.
    Суммируется в общей переменной. После завершения сканирования
    возвращается скорректированный размер.
    :param path_dir: строка, путь к директории для сканирования.
    :return: строка, скорректированный размер файла.
    """
    file_size = stat(path_dir).st_size
    for root, dirs, files in walk(path_dir):
        for file in files:
            file_size = file_size + stat(path.join(root, file)).st_size
    return correct_size(file_size)


def list_dir(path_dir: str):
    """
    Сканирование директории. Определение размера файлов и папок.
    Добавление данных об имени и размере в текстовый документ.
    Сортировка полученных объектов на файлы и папки в процессе
    итерации по ним. Если файл, определяем размер сразу. Если папка,
    передаем путь к ней в функцию получения размера папки.
    :param path_dir: строка, путь к директории для сканирования.
    """
    rez = sorted(listdir(path_dir))
    with open("out_ok.txt", "w") as file:
        for n, item in enumerate(rez):
            if path.isdir(path.join(path_dir, item)):
                size = folder_scan(path.join(path_dir, item))
            else:
                size = correct_size(stat(path.join(path_dir, item)).st_size)
            file.write(f"{n + 1} {item} - {size}\n")
    print('Список файлов смотрим здесь - out_ok.txt ')


def main():
    """
    Запрос у пользователя пути к сканируемой директории.
    Запуск функции сканирования с передачей в нее
    полученного от пользователя пути.
    """
    path_dir = input("Введите путь к сканируемой директории: ")
    if not path.exists(path_dir):
        print("Введенной вами директории не существует.")
        ex(0)
    list_dir(path_dir)


if __name__ == "__main__":
    main()

Здесь нужно учесть, что будут возвращаться размеры директорий именно верхнего уровня. Того, до которого может дотянуться listdir, а именно, размер папок в сканируемой директории.
Выдало ошибки:
Введите путь к сканируемой директории: E:\Мой Python\__Видеокурсы Python
Traceback (most recent call last):
File "E:\__Moi_scripti\10_files in a directory\0.py", line 69, in <module>
main()
File "E:\__Moi_scripti\10_files in a directory\0.py", line 65, in main
list_dir(path_dir)
File "E:\__Moi_scripti\10_files in a directory\0.py", line 48, in list_dir
size = folder_scan(path.join(path_dir, item))
File "E:\__Moi_scripti\10_files in a directory\0.py", line 31, in folder_scan
file_size = file_size + stat(path.join(root, file)).st_size
FileNotFoundError: [WinError 3] Системе не удается найти указанный путь: 'E:\\Мой Python\\__Видеокурсы Python\\01_Онлайн курс Python для тестировщика\\Курс\\11 Основы автоматизации тестирования веб-приложений с Selenium WebDriver на Python\\1 Практика, пишем простой тест проверки веб-сайта_files\\488c2a4e544f5d0cea166cfb9e33153247829078.jpg'
 
Выдало ошибки:
Введите путь к сканируемой директории: E:\Мой Python\__Видеокурсы Python
Traceback (most recent call last):
File "E:\__Moi_scripti\10_files in a directory\0.py", line 69, in <module>
main()
File "E:\__Moi_scripti\10_files in a directory\0.py", line 65, in main
list_dir(path_dir)
File "E:\__Moi_scripti\10_files in a directory\0.py", line 48, in list_dir
size = folder_scan(path.join(path_dir, item))
File "E:\__Moi_scripti\10_files in a directory\0.py", line 31, in folder_scan
file_size = file_size + stat(path.join(root, file)).st_size
FileNotFoundError: [WinError 3] Системе не удается найти указанный путь: 'E:\\Мой Python\\__Видеокурсы Python\\01_Онлайн курс Python для тестировщика\\Курс\\11 Основы автоматизации тестирования веб-приложений с Selenium WebDriver на Python\\1 Практика, пишем простой тест проверки веб-сайта_files\\488c2a4e544f5d0cea166cfb9e33153247829078.jpg'

Ну, здесь всего лишь одна ошибка )) А почему именно так... тут надо разобраться. Может быть это связано с глубиной вложенности файлов. Попробую у себя создать подобный путь и просканировать.
 
  • Нравится
Реакции: satfan
Выдало ошибки:
Введите путь к сканируемой директории: E:\Мой Python\__Видеокурсы Python
Traceback (most recent call last):
File "E:\__Moi_scripti\10_files in a directory\0.py", line 69, in <module>
main()
File "E:\__Moi_scripti\10_files in a directory\0.py", line 65, in main
list_dir(path_dir)
File "E:\__Moi_scripti\10_files in a directory\0.py", line 48, in list_dir
size = folder_scan(path.join(path_dir, item))
File "E:\__Moi_scripti\10_files in a directory\0.py", line 31, in folder_scan
file_size = file_size + stat(path.join(root, file)).st_size
FileNotFoundError: [WinError 3] Системе не удается найти указанный путь: 'E:\\Мой Python\\__Видеокурсы Python\\01_Онлайн курс Python для тестировщика\\Курс\\11 Основы автоматизации тестирования веб-приложений с Selenium WebDriver на Python\\1 Практика, пишем простой тест проверки веб-сайта_files\\488c2a4e544f5d0cea166cfb9e33153247829078.jpg'

Создал такой же путь как у вас. С такой же глубиной вложенности. Но у меня все отсканировалось корректно. Хотя, тут может быть разница в том, что у меня Linux.

01.png
 
Выдало ошибки:
Введите путь к сканируемой директории: E:\Мой Python\__Видеокурсы Python
Traceback (most recent call last):
File "E:\__Moi_scripti\10_files in a directory\0.py", line 69, in <module>
main()
File "E:\__Moi_scripti\10_files in a directory\0.py", line 65, in main
list_dir(path_dir)
File "E:\__Moi_scripti\10_files in a directory\0.py", line 48, in list_dir
size = folder_scan(path.join(path_dir, item))
File "E:\__Moi_scripti\10_files in a directory\0.py", line 31, in folder_scan
file_size = file_size + stat(path.join(root, file)).st_size
FileNotFoundError: [WinError 3] Системе не удается найти указанный путь: 'E:\\Мой Python\\__Видеокурсы Python\\01_Онлайн курс Python для тестировщика\\Курс\\11 Основы автоматизации тестирования веб-приложений с Selenium WebDriver на Python\\1 Практика, пишем простой тест проверки веб-сайта_files\\488c2a4e544f5d0cea166cfb9e33153247829078.jpg'

Попробую сделать этот же трюк на Windows.
 
  • Нравится
Реакции: satfan
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!