Извлечение комментариев с YouTube с помощью Python: Подробное руководство
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
- Создание виртуальной среды: Замените
<your-env>
на желаемое имя среды.
virtualenv <your-env>
- Активация виртуальной среды:
- Windows:
<your-env>\Scripts\activate
- Mac/Linux:
source <your-env>/bin/activate
- Установка необходимых пакетов:
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 может предоставить ценную информацию, но важно понимать ограничения и затраты платформы. Создавая виртуальную среду и учитывая квотную систему, вы можете эффективно и эффективно собирать необходимые данные, не сталкиваясь с неожиданными затратами. Независимо от того, анализируете ли вы комментарии на настроение, исследуете тренды или просто интересуетесь данными, этот руководство предоставляет инструменты и знания, чтобы начать.