July 12, 2020

Дістаємо та аналізуємо тексти відео з YouTube-каналів. Частина 1

Стало цікаво, яким же чином можна проаналізувати вміст відео на YouTube. Раніше доводилось працювати з сервісами Google, все захищено і важко добитись хороших результатів без прямого використання їх API. Проте з будь-якої ситуації можна знайти вихід, якщо сильно захотіти.

Що ж саме зробити?

Зацікавили мене рекомендаційні системи та їх реалізація, не дуже круто використовувати вже готові дані по фільмах і подібних речах. Хочеться чогось живого і трендового, слова з інтерв'ю підійдуть для цієї благої місії.

В мене є кілька основних каналів, які я періодично переглядаю, перше, що я б хотів зробити, це дістати ключові слова з текстів, провести мінімальне тематичне моделювання, спробувати прокластеризувати відео в рамках одного каналу. В подальшому перейти на рівень кількох каналів зі всім вмістом.

Дістаємо всі відео з каналу

Почну з каналу BigMoney, де Євген Черняк розпитує всіх про їхні бізнеси та підходи, з обов'язковим запитанням про їхню маржу :)

Вигляд каналу Big Money.

Перше, що приходить на думку, це використання Selenium для збору даних з каналів, прості запити тут не допоможуть, а розбиратись з YouTube API взагалі не хочеться, якщо в результаті буду використовувати лише кілька запитів. Отримувати ключі, ковиряти документацію, займатись довгою обробкою даних, які приходять, напевно ви зрозуміли. Мені ж тільки ID відео з каналу потрібні.

Ви тільки погляньте на розмір цього чортового JSON для YouTube Video Resource. Масштаб лінії для скролу змушує задуматись.

Нещодавно відкрив для себе пакетний менеджер під Windows, це як apt-get install в Linux, дуже прикольна штука під назвою Chocolatey, однозначний плюс шоколадному. Тепер можна не переживати про пошук частини пакетів, вносити їх у змінну PATH, щоб можна було з командного рядка користуватись командами. Виглядає дуже прикольно, я використав це для встановлення драйверів браузерів, що використовуються у Selenium, відповідний пакет можна знайти за посиланням.

Хоп хей ла-ла-лей. Встановлює все, що потрібно і економить час, однозначно рекомендую.

Після встановлення абсолютно всіх драйверів до браузерів, можна перейти до використання Selenium. Ще трішки пошукавши рішень, я наткнувся на бібліотеку під назвою yt-videos-list, це було приємно, як я думав, там під капотом Selenium, можна вибрати необхідний драйвер і отримати всі відео з каналу.

pip install yt-videos-list і я вже на крок ближче до отримання всіх необхідних даних.

В кілька рядків коду отримуємо результат, його можна скопіювати з посилання вище.

Результатом виконання є кілька файлів зі списком назв та посилань на відео в форматі CSV. З цим чудово справляється Pandas, тому його ми і використаємо для роботи з цими даними. Варто зазначити, що додатково в об'єкті ListCreator використовуються параметри:

  1. txt, md, csv — булеві, можна зберігати у файлах всіх цих форматів;
  2. headless — якщо не потрібно, щоб відображався браузер в процесі отримання даних, то варто передати цей параметр зі значенням True .
Так виглядають дані, отримані з допомогою цієї бібліотеки в форматі CSV.

Бачимо що тут є зайві поля, нам необхідно залишити лише два. Видаляємо непотрібні поля, де немає цікавих нам значень з використанням pandas.DataFrame , тут параметр inplace=True означає, що ми виконуємо кожну операцію і одразу застосовуємо результат до нашого фрейму. Немає необхідності записувати результат кожної з операцій до змінної:

df.drop(columns=["Watched?", "Watch again later?", "Notes", "Video Number"], inplace=True)
df.rename(columns={
    "Video Title": "title",
    "Video URL": "video_url",
}, inplace=True)

Створимо додаткове поле, що відповідає за ідентифікатор відео:

df["video_id"] = df.video_url.map(lambda url: urlsplit(url).query.strip("v="))

Цих маніпуляцій нам достатньо аби перейти до слідуючого етапу, де ми будемо витягувати тексти з отриманих відео. Там є декілька нюансів, які розглянемо в слідуючій частині.