CoderCastrov logo
CoderCastrov
Парсер на Python

Парсинг метаданных видео на YouTube с использованием библиотек Requests и Json только

Парсинг метаданных видео на YouTube с использованием библиотек Requests и Json только
просмотров
3 мин чтение
#Парсер на Python

В этом посте мы рассмотрим парсинг метаданных любого видео на YouTube для получения информации о просмотрах, лайках, дизлайках, дате публикации и т.д. с использованием Python. Мы не будем использовать сторонние библиотеки, которые парсят HTML, такие как Beautiful Soup.

Постановка задачи:

Получить метаданные видео на YouTube, такие как количество просмотров, количество лайков/дизлайков, дата публикации, заголовок видео и т.д., без использования сторонних библиотек, которые парсят HTML или JavaScript. Кроме того, мы не будем использовать YouTube API для получения данных.

Подход

Существует несколько способов получить данные с Youtube или любого другого веб-сайта. Чтобы разобрать веб-сайт, можно использовать библиотеку Beautiful Soup. Но мы воспользуемся еще более простым способом, чтобы получить необходимый набор данных.

Мы будем использовать библиотеку python requests для получения исходного кода страницы с ссылкой на видео Youtube и библиотеку json для разбора текста в объект Json.

У страницы Youtube есть определенная структура. Когда вы открываете исходный код страницы, ищите «ytInitialData», и вы увидите, что в теге script этой переменной присваивается json. Единственная проблема в том, что мы не можем использовать его как есть, и нам нужно немного его обработать. Так что в основном мы будем обрабатывать строки в Python, чтобы получить нужные данные.

Чтобы получить точный Json, мне нужно найти начальный и конечный индексы этого Json в исходном коде страницы. Но прежде чем перейти к разделу с кодом, попробуйте сделать это самостоятельно для любого видео Youtube, которое вы смотрите.

1. Чтобы получить исходный код страницы любого веб-сайта, вы можете щелкнуть правой кнопкой мыши на веб-сайте и выбрать опцию View Page Source.

2. Ищите ytInitialData на вкладке, где открыт исходный код страницы. Фактическая строка будет выглядеть примерно так:

Код

Давайте напишем его на Python пошагово:

В качестве предварительного шага вам нужно импортировать библиотеки json и requests.

import json
import requests
def import_video_data(URL):
    print('Получение исходного кода страницы видео по URL ' + URL)
    # window["ytInitialData"] =
    page_source = requests.get(URL)
    page_source = page_source.text
  1. Извлеките данные json из исходного кода страницы данной ссылки на видео.
    start_index = page_source.find('ytInitialData')
    tmp = page_source[ start_index+17:]
    end_index = tmp.find('}};')
    tmp = tmp[:end_index] + '}}'
    return tmp
  1. Теперь разберите возвращенную строку Json в виде объекта Json с помощью библиотеки Json. Здесь мы используем метод loads() для преобразования строки Json в словарь.
def parse_json(json_data):
    json_dict = json.loads(json_data)
    return json_dict

Json, который мы получили на предыдущем шаге, будет выглядеть примерно так:

<Image
  src="/blogs/4df3705ef1.jpg"
  width="700"
  height="548"
  alt=""
  sizes="100vw"
/>
  1. Из Json теперь мы можем извлечь любую информацию, которую хотим. Здесь показан базовый ручной способ получения заголовка, идентификатора видео, количества просмотров, лайков, дизлайков, их сокращенной формы и даты публикации:

Для идентификатора видео:

video_id = yt_json['currentVideoEndpoint']['watchEndpoint']['videoId']
print('Идентификатор видео: ' + video_id)

Для заголовка:

title = \
    yt_json['contents']['twoColumnWatchNextResults']['results']['results']['contents'][0]['videoPrimaryInfoRenderer'][
    'title']['runs'][0]['text']
print('Заголовок: ' + title)

Для количества просмотров и его сокращенной формы:

views = \
        yt_json['contents']['twoColumnWatchNextResults']['results']['results']['contents'][0]['videoPrimaryInfoRenderer'][
        'viewCount']['videoViewCountRenderer']['viewCount']['simpleText']
short_views = \
        yt_json['contents']['twoColumnWatchNextResults']['results']['results']['contents'][0]['videoPrimaryInfoRenderer'][
        'viewCount']['videoViewCountRenderer']['shortViewCount']['simpleText']
print('Просмотры: ' + views + ' в сокращенной форме: ' + short_views)

Для лайков и их сокращенной формы:

likes = \
        yt_json['contents']['twoColumnWatchNextResults']['results']['results']['contents'][0]['videoPrimaryInfoRenderer'][
        'videoActions']['menuRenderer']['topLevelButtons'][0]['toggleButtonRenderer']['defaultText']['accessibility'][
        'accessibilityData']['label']
likes_inshort = \
        yt_json['contents']['twoColumnWatchNextResults']['results']['results']['contents'][0]['videoPrimaryInfoRenderer'][
        'videoActions']['menuRenderer']['topLevelButtons'][0]['toggleButtonRenderer']['defaultText']['simpleText']
print('Лайки: ' + likes + ' в сокращенной форме: ' + likes_inshort)

Для дизлайков и их сокращенной формы:

dislikes = \
        yt_json['contents']['twoColumnWatchNextResults']['results']['results']['contents'][0]['videoPrimaryInfoRenderer'][
        'videoActions']['menuRenderer']['topLevelButtons'][1]['toggleButtonRenderer']['defaultText']['accessibility'][
        'accessibilityData']['label']
dislikes_inshort = \
        yt_json['contents']['twoColumnWatchNextResults']['results']['results']['contents'][0]['videoPrimaryInfoRenderer'][
        'videoActions']['menuRenderer']['topLevelButtons'][1]['toggleButtonRenderer']['defaultText']['simpleText']
print('Дизлайки: ' + dislikes + ' в сокращенной форме: ' + dislikes_inshort)

Для даты публикации:

published_date = \
        yt_json['contents']['twoColumnWatchNextResults']['results']['results']['contents'][0]['videoPrimaryInfoRenderer'][
        'dateText']['simpleText']
print('Дата публикации: ' + published_date)

Вывод вышеприведенного кода будет выглядеть следующим образом:

Получение исходного кода страницы видео по URL https://www.youtube.com/watch?v=JRtgXN-bwGE
Идентификатор видео: JRtgXN-bwGE
Заголовок: Honest Review | Raat Akeli Hai, Shakuntala Devi & Lootcase | MensXP
Просмотры: 282,420 просмотров в сокращенной форме: 282K просмотров
Лайки: 21,343 лайков в сокращенной форме: 21K
Дизлайки: 413 дизлайков в сокращенной форме: 413
Дата публикации: 1 Aug 2020

Используя указанную выше технику, у вас будет Json, и вы сможете извлекать любые данные, которые вам нужны. Вы можете найти весь этот код в моем репозитории на Github.

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