Используйте Selenium и python для просмотра видео на YouTube для вас (или ваших клиентов).
Я начал изучать веб-скрапинг для развлечения и, возможно, для того, чтобы дать несколько концертов на Fiverr: в конце концов, это открыло совершенно новую главу в моем списке обучения, потому что я увидел большой потенциал.
В этой статье мы кратко рассмотрим очень известную библиотеку веб-скрейпинга под названием Selenium.
Используя Selenium и Python, мы можем создать полностью автоматизированную программу, которая воспроизводит видео на YouTube и просматривает их от вашего имени. Путем проб и ошибок вы можете использовать его для просмотра новостных статей, чтения веб-страниц и многого другого.
ВНИМАНИЕ, СПОЙЛЕР: здесь мы также собираемся исправить проблему с pytube, которая, наконец, будет работать на вас!
Полный код находится в моем репозитории на github.
Что такое веб-скрапинг и что такое Selenium
Веб-скрапинг — это метод сбора данных с веб-сайтов с использованием программирования или автоматизации. Это требует написания кода, который обращается к веб-страницам и извлекает из них информацию, которую затем можно сохранить и проанализировать.
Веб-скрапинг предлагает множество преимуществ, включая сбор данных для исследования и анализа рынка, а также агрегацию контента. Компании могут использовать веб-скрапинг для сбора информации о ценах с сайтов конкурентов, а исследователи могут использовать ее для отслеживания тенденций в социальных сетях.
Selenium — популярный фреймворк с открытым исходным кодом для автоматизации веб-браузеров. Он предоставляет разработчикам возможность писать сценарии на различных языках программирования, включая Python, для управления веб-браузерами и взаимодействия с ними.
Selenium for Python — это привязка Python к Selenium WebDriver API, которая позволяет нам писать тестовые сценарии, автоматизирующие взаимодействие с веб-браузером. С помощью Selenium для Python разработчики могут имитировать действия пользователя, такие как нажатие кнопок, заполнение форм и переход между страницами, и все это из кода Python.
Selenium для Python широко используется для веб-тестирования и веб-скрейпинга. Вы можете использовать его для тестирования веб-приложений, для автоматизации задач, выполняемых в браузере, или для извлечения данных с веб-сайтов.
Если вы используете Selenium, вы можете автоматизировать взаимодействие с веб-приложениями и извлекать данные с веб-страниц. Это особенно полезно для тестирования веб-приложений со сложными взаимодействиями или приложений, содержащих JavaScript или AJAX.
Давайте напишем наш просмотрщик Selenium Youtube
Для целей этой статьи я настоятельно рекомендую вам использовать виртуальную среду. Это будет работать в любом случае, но хорошей практикой является песочница ваших новых проектов (поэтому, даже если pypy решит изменить некоторые библиотеки, ваш код не пострадает).
Создайте виртуальную среду и активируйте ее
Перейдите в нужную папку проекта (например, Documents/python/u2be-viewer). Из терминала выполните следующее:
python3 -m venv u2beview
Теперь в вашем каталоге `Documents/python/u2be-viewer` будет установлена виртуальная среда (теперь venv). вам просто нужно активировать его. Всякий раз, когда venv активен, все используемые пакеты и интерпретатор Python — это только те, которые вы собираетесь установить.
Активировать
cd u2beview source bin/activate
Когда ваш venv активен, в терминале или в вашем коде Visual Studio появится новый знак: это означает, что вы готовы!
Чтобы деактивировать
source deactivate
Установите необходимые зависимости и библиотеки
Мы знаем, что нам предстоит работать с Selenium и Youtube. Итак, давайте установим необходимые библиотеки Python.
pip install selenium pip install webdriver-manager pip install pytube
Селен и веб-драйверы
Selenium — очень мощный фреймворк: он использует веб-драйверы, чтобы заставить Chrome, Firefox или другой браузер делать всю работу за вас.
В этом проекте мы не рассматриваем xpath, волшебство для взаимодействия с HTML-элементами веб-страницы. в документе XML или HTML. Он означает XML Path Language и используется для перемещения по элементам и атрибутам документа XML или HTML, аналогично тому, как путь файловой системы используется для навигации по каталогам и файлам.
XPath позволяет находить элементы в XML- или HTML-документе по имени элемента, значению атрибута или положению в иерархии документа. Он использует синтаксис, напоминающий путь к файлу, с косой чертой, разделяющей элементы и атрибуты.
Здесь я хочу познакомить вас с реальным проектом, где с минимальными знаниями вы можете масштабировать его и решить, что изучать дальше.
Импортируйте библиотеки и запустите веб-браузер
from selenium import webdriver from selenium.webdriver.chrome.service import Service from selenium.webdriver.chrome.options import Options from webdriver_manager.chrome import ChromeDriverManager import time import datetime import tqdm import ssl import requests from pytube import YouTube as YT
Первые 4 строки необходимы для работы Selenium и браузера Chrome. Время, запросы, ssl и Datetime мы будем использовать для получения информации о видео. Pytube — это наша библиотека для взаимодействия с YouTube.
# SSL for proxied internet access ssl._create_default_https_context = ssl._create_unverified_context # SELENIUM options to not close the browser options = Options() options.add_experimental_option("detach", False) options.add_argument("--mute-audio") driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()), options=options)
Когда мы хотим использовать Chrome с Selenium, мы должны загрузить драйвер и указать некоторые параметры его поведения. В нашем случае detach — это возможность закрыть (если True) или не закрывать браузер в конце программы.
Я также отключаю звук, потому что Selenium должен смотреть за нас видео (а мы не хотим его слышать…). Теперь с этой строкой откроется окно браузера, управляемое Selenium.
driver.get("www.google.com")
Это только для теста. Давайте двигаться дальше.
Объекты Pytube
Pytube — очень популярный пакет для взаимодействия с YouTube, к тому же довольно простой. Мы уже импортировали его ранее (из pytube импортировать YouTube как YT), и теперь нам просто нужно передать URL-адрес видео YouTube, чтобы получить всю необходимую информацию.
myvideo = YT("https://youtu.be/hS5CfP8n_js", use_oauth=True, allow_oauth_cache=True) print(f"TITLE: {myvideo.title}") print(f"thumbnail url: {myvideo.thumbnail_url}") print(f"Video subtitles: {myvideo.captions}") print(f"video Duration: {str(datetime.timedelta(seconds=myvideo.length))}") print("----------------------------------------") print(myvideo.description) print("----------------------------------------") duration = myvideo.length print(duration)
Обратите внимание на два аргумента в первом операторе: use_oauth=True, allow_oauth_cache=True. Это необходимо, если вы хотите, чтобы pytube работал. Youtube недавно изменил его код, и пока что единственный выход — использовать аутентификацию. По сути, при первом запуске он попросит вас пройти аутентификацию, и после этого вы будете готовы.
Результатом кода выше является печатная информация о видео. Для нашей цели мы будем использовать только продолжительность видео: мы хотим, чтобы Selenium открывал и воспроизводил страницу YouTube на протяжении всего видео.
TITLE: Motivational short video - How to succeed - cartoon thumbnail url: https://i.ytimg.com/vi/hS5CfP8n_js/sddefault.jpg?sqp=-oaymwEmCIAFEOAD8quKqQMa8AEB-AH-CYAC0AWKAgwIABABGHIgZCgdMA8=&rs=AOn4CLAgDqi4Pc2L9_f1xZq-cu9cNei57g Video subtitles: {'a.es': <Caption lang="Spanish (auto-generated)" code="a.es">} video Duration: 0:00:56 ---------------------------------------- All rights of music and video clips used in this movie belong to their respective owners. ---------------------------------------- 56
Селен смотрит ютуб
Объединив то, что мы теперь знаем о pytube и Selenium, мы можем попросить нашу программу открыть Chrome на видеостранице youtube и смотреть ее в течение всего времени (которое дается к нам уже за секунды).
url = "https://youtu.be/hS5CfP8n_js" myvideo = YT(url, use_oauth=True, allow_oauth_cache=True) duration = myvideo.length driver.get(url) start = datetime.datetime.now() #not used now but useful time.sleep(duration)
Selenium просматривает список видео для вас
Почему только один? Возможно, клиент просит вас просмотреть все его/ее видео. Теперь, когда мы знаем, как это сделать, это очень просто.
Мы создаем список URL-адресов видео на YouTube и повторяем список. Чтобы дать нам немного больше контроля и мониторинга состояния цикла, мы собираемся использовать tqdm. Tqdm — известная библиотека для индикаторов выполнения, и она поставляется с итератором (идеально подходит для нашего списка) и возвращает нам процент выполнения цикла… Это ниже из официальной документации tqdm: 2 строки кода… Удивительный!
from tqdm import tqdm for i in tqdm(range(10000)): ...
76%|████████████████████████████ | 7568/10000 [00:33<00:10, 229.00it/s]
Я создал небольшой список с короткими видео (просто для теста):
# video URLs in LIST format url_list = [ "https://youtu.be/hS5CfP8n_js", "https://youtu.be/a4LICTpN24s", "https://youtu.be/2j3p_aDMTNg", "https://youtube.com/shorts/eaMDDseIL7E?feature=share", "https://youtube.com/shorts/ZlUj2WQ7_GE?feature=share" ]
Теперь мы можем выполнять итерацию в цикле, используя tqdm, чтобы показать нам прогресс в окне терминала во время выполнения.
#code to watch the youtube video for the entire lenght initial_start = datetime.datetime.now() #not used now but useful for url in tqdm.tqdm(url_list,desc="Progress:"): myvideo = YT(url, use_oauth=True, allow_oauth_cache=True) duration = myvideo.length driver.get(url) start = datetime.datetime.now() #not used now but useful time.sleep(duration) # TAKE FINAL TIME end = datetime.datetime.now() #not used now but useful elapsed = end - start #not used now but useful #total time final_elapsed = end - initial_start #not used now but useful print(f"completed in {final_elapsed}") print("-----------------------------------")
Полный рабочий скрипт Python находится в моем репозитории github: вы можете использовать его, чтобы проверить, все ли в порядке.
Что будет дальше?
Это небольшое введение в то, что вы можете делать с Selenium и Python. Читая документы, вы можете узнать, как взаимодействовать с кнопками, как понемногу прокручивать страницы (например, имитируя ридер…) и так далее.
Вы можете попробовать улучшить взаимодействие на первом видео, чтобы убрать надоедливые запросы youtube/google…
Найдите способ убрать рекламу…
Удачи!
Если эта история была полезной, и вы хотите оказать небольшую поддержку, вы можете:
- Хлопните 50 раз за эту историю (это действительно очень помогает мне)
- Следуй за мной на Medium
- читайте мои последние статьи (https://medium.com/@fabio.matricardi)