Как извлекать данные из YouTube

Рассказываем, как использовать парсинг для сбора информации о YouTube-роликах.

Перевод статьи Шубхама Сингха

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

Примеры использования парсинга:

  • Сбор данных для маркетинговых исследований. Например, можно извлекать информацию о товарах и ценах конкурентов.
  • Сбор информации о поставщиках и производителях на рынке.
  • Сбор информации с сайтов (RSS-ленты).
  • Поиск вакансий по определенным параметрам.
  • Отслеживание цен в магазинах.

Чтобы детально настроить парсинг:

  • Нужно базовое понимание работы HTML и CSS, чтобы понимать, какие элементы веб-страницы мы хотим анализировать.
  • Понимание Python для анализа и построения моделей. Для очистки данных будем использовать библиотеку NLTK.
  • Желательно знать библиотеки Pandas и NumPy.

Чтобы извлекать данные из YouTube-роликов, мы будем использовать Selenium WebDriver и Python, а в конце — распределим видео на разные категории.

В статье:

  1. Что такое Selenium WebDriver.
  2. Настроить среду разработки для Python.
  3. Извлечь данные из YouTube.
  4. Очистить данные с помощью библиотеки NLTK.
  5. Построить модель для классификации видео.
  6. Как проанализировать результаты.

Что такое Selenium WebDriver

Selenium WebDriver — это инструмент, который автоматизирует работу браузера. Чтобы этого добиться, нужно:

  1. Написать скрипт на Python, чтобы извлекать и хранить данные в нужном формате. С помощью скрипта мы автоматизируем поведение браузера через Selenium.
  2. Установить драйвер для браузера. Selenium общается с браузером напрямую через этот драйвер и  контролирует его работу с помощью движка самого браузера.

Настроить среду разработки для Python

Установите Python.
Скачать

Шаг 1. Установите привязку к Selenium:

Шаг 2. Установите Chrome WebDriver. Для этого проверьте текущую версию браузера и выберите подходящий драйвер.

Чтобы узнать версию браузера, нажмите на три точки → «Справка» → «О браузере Google Chrome».

Скачать ChromeDriver

Шаг 3.

На Windows драйвер запускается при открытии. На Linux переместите драйвер в PATH:

Приступайте к парсингу после установки и запуска драйвера.

Извлечь данные из YouTube

Пример данных, которые можно собрать о ролике:

  • ID ролика (идентификатор),
  • заголовок,
  • описание ролика,
  • категория видеороликов.

Категории роликов, из которых данные будут извлекаться. Категорий шесть:

  • путешествия,
  • наука,
  • еда,
  • история,
  • производство,
  • искусство.

Чтобы начать извлекать данные, загрузите библиотеки и откройте YouTube в браузере:

Укажите категорию для поиска роликов и установите фильтр для videos — это покажет только видео, которые относятся к поиску.

После этого скопируйте URL и установите драйвер для того, чтобы получать информацию из URL из YouTube:

Укажите ссылку внутри функции и запустите код. Откроется новое окно, в котором будут происходить все последующие действия.

Получите ссылки видео, которые появятся на открывшейся странице. Создайте список для хранения этих ссылок.

Вернитесь в браузер, нажмите правой кнопкой мыши по странице и выберите inspect element.

Найдите тег <a> с идентификатором “video-title”, нажмите правой кнопкой мыши → скопировать → Xpath. Xpath выглядит примерно так:

Чтобы на странице отобразилось как можно больше роликов, прокрутите максимально вниз. Запустите код, чтобы получить все имеющиеся ссылки на странице (атрибуты href тега <a>) и сохранить их в список:

Создайте массив данных с четырьмя столбиками:

  • link (ссылка),
  • title (заголовок),
  • description (описание),
  • category (категория видео).

Информация о видео сохранится в эти столбики:

Теперь можно приступить к парсингу данных видео из YouTube. Для этого нужен код на Python:

Подробнее:

  • wait игнорирует все экземпляры класса NotFoundException, которые по умолчанию встретятся в условии until. Wait передается автоматически всем остальным экземплярам.
  • driver. С помощью этого параметра WebDrive передастся нужным предопределенным условиям.
  • timeOutInSeconds. Этот параметр определяет время задержки условия в секундах.
  • for. Цикл применяется для всего списка ссылок, который мы создали.
  • driver.get(x) переходит последовательно по всем ссылкам и собирает нужную информацию.
  • v_category сохраняет категорию видео, которую мы искали ранее.
  • v_id сохраняет полученные идентификаторы.
  • v_title сохраняет заголовок видео через CSS.
  • v_description сохраняет описание видео.

Во время каждой итерации данные сохраняются внутри массива. После запуска скрипта для всех категорий видео, получится 6 массивов данных, которые нужно объединить:

Общий массив содержит шесть категорий видео и четыре тега.

Очистить данные с помощью библиотеки NLTK

Очистка исправляет ошибки и повышает качество собранных данных. Для очистки данных в Title и Description используйте библиотеку NLTK.

Перед очисткой сохраните колонки массива по отдельности:

Импортируйте нужные библиотеки:

Чтобы очищенные данные сохранились в массиве, создайте для них список. Пример кода, который очистит колонку Title от df_title:

Удалится пунктуация, останутся корни слов. После нескольких итераций сформируется список с полными очищенными данными.

Повторите процесс для колонки Description, чтобы очистить ее от df_description:

Сконвертируйте списки в массив:

Сопоставьте категории. Функция LavelEncouter() присваивает категории номер, начиная с 0 до (n_classes − 1), где n — общее число классов:

Сохраните очищенные данные в новую таблицу:

Чтобы закончить с очисткой и преобразованием данных, создайте список слов, к которым модель будет обращаться и правильно классифицировать видео. Код, чтобы получить список слов:

X хранит общее число признаков, Y — зашифрованные данные.

Получилось 1500 признаков из данных, сохраненных в списках — corpus и corpus1. Теперь можно приступить к построению модели для классификации видео.

Построить модель для классификации видео

Прежде чем построить модель, разделите исходные наборы переменных данные на две выборки: тренировочную и тестовую. Тренировочная выборка помогает построить модель, тестовая — проверить ее работоспособность.

Убедитесь, что тестовая выборка:

  • Довольно большая, чтобы получить статистически значимые результаты.
  • Представляет весь набор данных. Нужно формировать тестовую выборку так, чтобы она соотносилось с тренировочной.

Чтобы разделить данные:

Проверьте модель с помощью алгоритма random forest algorithm и функции RandomForestClassifier():

Параметры:

  1. n_estimators — общее число вариантов решений.
  2. criterion — функция, отвечающая за качество разделения информации.

Проверьте работоспособность модели на тренировочной выборке:

Точность составила 96%. После тестирования проанализируйте результаты.

Как проанализировать результаты

Проверьте отчет по выборкам:

Как выглядит отчет:


Что проверить:

  • Точность (Precision)—  насколько точно найденные видео соответствуют категории видео.
  • Полнота (Recall) — отношение всех видео, принадлежащих определенной категории, ко всем категориям.
  • F-мера (F1-score). Метрика, которая показывает среднее значение между точностью и полнотой. F1-score = 2*(Precision * Recall)/ (Precision + Recall).

Точность и полнота используются при оценке большей части алгоритмов извлечения информации. Эти значения легко рассчитать на основании таблицы контингентности (случайности), которая составляется для каждого класса отдельно.

В таблице содержится информация о том, сколько раз система приняла верное и неверное решение по документам заданного класса:

  • TP — истино-положительное решение;
  • TN — истино-отрицательное решение;
  • FP — ложно-положительное решение;
  • FN — ложно-отрицательное решение.

Точность и полнота определяются по формуле:

Проверьте результаты, создав матрицу неточностей:

 

Поскольку изначально было 6 категорий видео, матрица будет 6 × 6

Вывод

Парсинг YouTube-роликов позволяет быстро собрать метаданные роликов и каналов, проанализировать результат поисковой выдачи по ключевому слову, количество видео по ключу в выдаче YouTube, поисковые подсказки, собрать комментарии к видео, собрать контакты каналов.

Это поможет, если вы работаете с CPA-сетями или хотите проанализировать видео конкурентов в определенной категории. В результате вы получите необходимую информацию для продвижения видео в поисковиках и самом YouTube.

 

Весь код, используемый в примерах, относится к «случайному лесу» — алгоритму машинного обучения. Скачать код можно на Гитхабе.

Примеры кода и оригинал статьи:
Data Science Project: Scraping YouTube Data using Python and Selenium to Classify Videos