Найти в Дзене

Парсим данные из Ютуба — часть 2

Обещал вам продолжение статьи про вытягивание данных из ютуба в гугл-таблицы - и пропал на две недели, ну как же так? Хорошо, исправляюсь, пишу продолжение. И чтобы не обижать, продолжения будет два, нашел еще один способ, в итоге будет 3 рабочих способа вытянуть данные.

Напомню, в первой части статьи мы использовали встроенную функцию IMPORTXML и обнаружили, что многие веб-страницы сейчас делаются динамически, с помощью данных, которые задаются в скриптах (например, почти все, что делает гугл использует фреймвор Angular JS). Что делать? Вычленять данные из скриптов. Этим и займемся.

Заходим в редактор скриптов и создаем новый проект, добавляем туда код:

Первая часть (в функции onOpen) создает простой триггер, который автоматически выполняется при открытии файла и добавляет новое меню “YouTube Data”. Во второй части (функция getDataFromScript) мы скачиваем страницу, указанную по ссылке с помощью метода UrlFetchApp.fetch и сохраняем из всего текста кусок скрипта, в котором инициализируется переменная ytInitialData. Почему именно этот кусок? Если открыть исходный код страницы и поискать нужные нам значения, например, количество просмотров, количество лайков и дизлайков, можно увидеть, что все эти данные есть только в одном куске кода, где происходит инициализация переменной значениями. Эти значения нам и нужно будет получить.

Наконец, с помощью регулярных выражений мы ищем нужные нам значения:

  • Количество просмотров:
    var views = script[0].match(/"viewCount":{"simpleText":"([0-9,]*)/);
  • Количество лайков:
    var likes = script[0].match(/"LIKE"[{},:"A-z]*([0-9,]*)/);
  • Количество дизлайков:
    var dislikes = script[0].match(/"DISLIKE"[{},:"A-z]*([0-9,]*)/);
  • Продолжительность ролика:
    var len = script[0].match(/lengthText":[{},:"A-z0-9\sА-я]*"simpleText":"([0-9:]*)"},"indexText":{"simpleText":"▶"}/);
  • Название ролика:
    var title = script[0].match(/videoPrimaryInfoRenderer[{},:"A-z]*"text":"(.+?)"}]}/)

Все эти данные мы выводим обратно в таблицу. Кстати, здесь нас поджидал еще один сюрприз. Сервер выдавал отличающийся код страницы браузеру и в гугл-таблицы. Это происходило из-за региональных настроек, например, у нас десятичный разделитель — это запятая (“,”), а в штатах это точка (“.”). У нас разделитель разрядов в числе это пробел, а в штатах запятая. Все эти аспекты тоже пришлось учитывать.

Делюсь с вами гугл-таблицей, где скрипт уже реализован: https://docs.google.com/spreadsheets/d/1HRgsMXeTnnnfoXruNkiXO14hqnMPs6gzlVP4j7ZRrXY/edit?usp=sharing

А самые пытливые из вас могут найти и третий (самый правильный!) способ получения данных из ютюба, про который я расскажу в следующей статье.

Хотите видео с пошаговым объяснением что как и почему?

Я не очень люблю снимать видео, хотя, говорят, что это очень востребованный формат. Напишите в комментариях или в личное сообщение, если вы хотите видео-версию статьи.

Наука
7 млн интересуются