Используйте 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…

Найдите способ убрать рекламу…

Удачи!

Если эта история была полезной, и вы хотите оказать небольшую поддержку, вы можете:

  1. Хлопните 50 раз за эту историю (это действительно очень помогает мне)
  2. Следуй за мной на Medium
  3. читайте мои последние статьи (https://medium.com/@fabio.matricardi)