Профессиональный скрипт на Python для массового сбора данных с YouTube через официальный API v3. Читает ключевые слова из Google Sheets, собирает информацию о видео и сохраняет результаты обратно в Google Sheets и локальный CSV-файл.
Спроектирован для длительной работы и устойчивости к ошибкам. Описание как парсер для ютуба рождался можно почитать в моей статье на моем блоге - Парсинг Youtube. Личная рекомендация для генерации АПИ ключей используйте браузер Gologin (дают бесплатно до 2гб прокси трафика), если трафик прокси кончился, можно докупить на этом сервисе, свежий игрок, так что не ломят цены - Floppydata.com
- Ротация API-ключей: Автоматически переключается между несколькими API-ключами при исчерпании квоты одного из них.
- Сохранение состояния: Скрипт запоминает, на каком ключевом слове остановился, и при перезапуске продолжает с того же места.
- Кэширование запросов: Повторные запросы с одинаковыми параметрами берутся из локального кэша, экономя драгоценные единицы квоты API.
- Отказоустойчивость: Встроены механизмы повторных попыток (retry) при сетевых сбоях и ошибках API.
- Пакетная запись: Результаты сохраняются порциями (батчами), чтобы не потерять данные при внезапном сбое.
- Интеграция с Google Sheets: Удобное управление входными данными и просмотр результатов прямо в таблице.
- Гибкая конфигурация: Все параметры (ключи, ID таблиц, настройки поиска) вынесены в
.envфайл.
git clone https://github.com/ВАШ_НИК/youtube-parser.git
cd youtube-parserРекомендуется использовать виртуальное окружение, чтобы не засорять системные библиотеки.
# Создание окружения
python -m venv venv
# Активация (Windows)
venv\Scripts\activate
# Активация (macOS/Linux)
source venv/bin/activate
# Установка зависимостей
pip install -r requirements.txt-
YouTube Data API v3:
- Перейдите в Google Cloud Console.
- Создайте новый проект.
- В разделе "APIs & Services" -> "Library" найдите и включите "YouTube Data API v3".
- Перейдите в "Credentials" и создайте несколько API Keys. Скопируйте их.
-
Google Sheets API:
- В том же проекте в "Library" найдите и включите "Google Sheets API".
- Перейдите в "Credentials" -> "Create credentials" -> "Service Account".
- Дайте ему имя, пропустите шаги с ролями.
- На последнем шаге найдите созданный аккаунт, перейдите в него, во вкладку "Keys" -> "Add Key" -> "Create new key". Выберите JSON и скачайте файл.
- Переименуйте скачанный файл в
credentials.jsonи положите его в корень проекта. - Скопируйте email сервисного аккаунта (выглядит как
...gserviceaccount.com). - Откройте вашу Google Таблицу и предоставьте этому email'у права на редактирование (кнопка "Share").
- Скопируйте файл
.env.exampleи переименуйте его в.env.# (в Windows используйте copy) copy .env.example .env # (в macOS/Linux) cp .env.example .env
- Откройте
.envи заполните все поля вашими данными:SHEET_ID: ID вашей Google Таблицы.SERVICE_ACCOUNT_JSON: Убедитесь, что имя файла совпадает с вашим JSON-ключом (credentials.json).YT_API_KEYS: Вставьте ваши YouTube API ключи через запятую, без пробелов и кавычек.- Остальные параметры настройте по желанию.
- Убедитесь, что у вас есть два листа с именами, указанными в
.env(по умолчаниюKeywordsиResults). - В листе
KeywordsстолбецA(начиная сA2) должен содержать ключевые слова для поиска. - Столбец
J(начиная сJ2) может содержать исходные URL (если они есть), которые будут просто перенесены в таблицу результатов для удобства.
После завершения всех настроек просто запустите скрипт из корневой папки проекта:
python yt_parser.pyВы увидите логи процесса в консоли. Результаты будут дописываться в лист Results в вашей Google Таблице и в файл yt_results.csv.
KeyManager: Центральный класс для управления API-ключами. Он выдает рабочий ключ, а в случае ошибкиquotaExceededдеактивирует его и прозрачно переключается на следующий.shelve: Встроенная библиотека Python, которая используется для создания персистентных хранилищ:progress.db: Хранит индекс последнего успешно обработанного ключевого слова.yt_cache.db: Хранит ответы от YouTube API. Ключом является уникальная строка запроса, а значением — ответ сервера. Это радикально экономит квоту при повторных запусках.
- Обработка ошибок: Скрипт использует
try...exceptблоки не только для квот, но и для сетевых проблем (ConnectionResetError,socket.error), применяя стратегию экспоненциальной задержки (Exponential Backoff) для повторных попыток.