CoderCastrov logo
CoderCastrov
Парсер

Извлечение комментариев с YouTube с помощью Python: Подробное руководство

Извлечение комментариев с YouTube с помощью Python: Подробное руководство
просмотров
4 мин чтение
#Парсер

YouTube является кладовой данных для создателей контента, маркетологов и исследователей. В этой статье мы более подробно рассмотрим извлечение комментариев с вашего собственного видео на YouTube с использованием Python и YouTube Data API v3. Мы также обсудим процесс получения ключа API от Google Cloud Platform, настройку виртуальной среды и понимание лимитов квоты API.

https://github.com/rodolflying/youtube_automation Вот репозиторий, о котором мы поговорим.

1. Получение API-ключа от Google Cloud Platform:

Пошаговое руководство:

2. Настройка виртуальной среды:

Виртуальная среда - это изолированная среда, где вы можете устанавливать пакеты, не влияя на глобальную установку Python. Она особенно полезна для управления зависимостями, специфичными для проекта.

Пошаговое руководство:

pip install virtualenv

  1. Создание виртуальной среды: Замените <your-env> на желаемое имя среды.

virtualenv <your-env>

  1. Активация виртуальной среды:
  • Windows: <your-env>\Scripts\activate
  • Mac/Linux: source <your-env>/bin/activate
  1. Установка необходимых пакетов:

pip install google-api-python-client python-dotenv pandas

3. Понимание кода:

В предоставленном скрипте мы сосредоточимся на извлечении комментариев из определенного видео на YouTube. Разберем основную функцию get_comments, чтобы понять ее работу:

get_comments(api_key, video_id):

Эта функция отвечает за получение комментариев и ответов на них для заданного видео на YouTube.

youtube = build('youtube', 'v3', developerKey=api_key)

Здесь мы используем функцию build из googleapiclient.discovery для инициализации клиента YouTube API с предоставленным ключом API.

2. Настройка запроса к API:

request = youtube.commentThreads().list(part="snippet,replies", videoId=video_id, textFormat="plainText" )

Мы настраиваем запрос для получения нитей комментариев указанного видео. Параметр part указывает, какие части ресурса нити комментариев мы хотим получить.

3. Перебор пагинированных результатов: YouTube API возвращает результаты в виде страниц. Цикл while гарантирует, что мы получим все страницы комментариев:

    while request:
        replies = []
        comments = []
        dates = []
        user_names = []

        try:
            response = request.execute()

            for item in response['items']:
                # Извлечение комментариев
                comment = item['snippet']['topLevelComment']['snippet']['textDisplay']
                comments.append(comment)

                user_name = item['snippet']['topLevelComment']['snippet']['authorDisplayName']
                user_names.append(user_name)

                date = item['snippet']['topLevelComment']['snippet']['publishedAt']
                dates.append(date)

                # подсчет количества ответов на комментарий
                replycount = item['snippet']['totalReplyCount']

                # если есть ответы
                if replycount > 0:
                    # добавляем пустой список в replies
                    replies.append([])
                    # перебираем все ответы
                    for reply in item['replies']['comments']:
                        # Извлечение ответа
                        reply = reply['snippet']['textDisplay']
                        # добавляем ответ в последний элемент replies
                        replies[-1].append(reply)
                else:
                    replies.append([])

            # создание нового DataFrame
            df2 = pd.DataFrame({"comment": comments, "replies": replies, "user_name": user_names, "date": dates})
            df = pd.concat([df, df2], ignore_index=True)
            df.to_csv(f"{video_id}_user_comments.csv", index=False, encoding='utf-8')
            sleep(2)
            request = youtube.commentThreads().list_next(request, response)
            print("Переход к следующей странице")
        except Exception as e:
            print(str(e))
            print(traceback.format_exc())
            print("Ожидание 10 секунд")
            sleep(10)
            df.to_csv(f"{video_id}_user_comments.csv", index=False, encoding='utf-8')
            break

4. Извлечение данных из ответа: Для каждой нити комментариев в ответе мы извлекаем:

  • Основной комментарий.
  • Имя пользователя, оставившего комментарий.
  • Дату публикации комментария.
  • Любые ответы на комментарий.

Эти данные затем добавляются в списки, которые используются для создания pandas DataFrame.

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

6. Обработка ошибок: В случае возникновения исключений во время запроса к API, ошибка выводится на печать, а программа ожидает 10 секунд перед продолжением. Это может помочь избежать превышения лимитов или обработать временные проблемы.

7. Сохранение в CSV: Комментарии и их детали периодически сохраняются в файл CSV, названном по идентификатору видео. Это гарантирует, что даже если скрипт столкнется с проблемой, данные, полученные до этого момента, будут сохранены.


Дополнительные ресурсы:

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

Кроме того, важно понимать, что у YouTube API есть система квоты. Каждая функция или конечная точка потребляет определенное количество квотных единиц.

  • Бесплатная квота: По умолчанию вы получаете 10 000 квотных единиц в день бесплатно.
  • Стоимость квоты: Каждая вызываемая вами функция потребляет определенное количество этих единиц. Например, функция commentThreads().list, используемая в скрипте, имеет свою собственную стоимость. Вы можете обратиться к официальной документации, чтобы определить стоимость квоты для различных функций.

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

Заключение:

Извлечение данных из YouTube может предоставить ценную информацию, но важно понимать ограничения и затраты платформы. Создавая виртуальную среду и учитывая квотную систему, вы можете эффективно и эффективно собирать необходимые данные, не сталкиваясь с неожиданными затратами. Независимо от того, анализируете ли вы комментарии на настроение, исследуете тренды или просто интересуетесь данными, этот руководство предоставляет инструменты и знания, чтобы начать.