Архитектура и принципы работы
Данный документ описывает архитектуру и ключевые принципы работы системы парсинга, основанной на API Яндекса. Основной фокус сделан на масштабируемость, асинхронность, повторное использование кода и соблюдение ограничений на внешние запросы (rate limiting).
Ключевые компоненты
Yandex API клиенты
YandexAPI:
Базовый абстрактный класс, отвечающий за взаимодействие с API Яндекса.
Реализует автоматическое обновление IAM-токенов через OAuth-поток.
Токены кэшируются в базе данных, чтобы избежать лишнего обращения к сервису авторизации.
Предусмотрен механизм повторного получения токена при его истечении.
YandexSearchTextApiV1:
Расширяет базовый YandexAPI.
Поддерживает как дневной, так и ночной режим работы (определяется по расписанию).
Встроенный механизм ограничения частоты запросов (Rate Limiter) с настройкой RPS.
Упрощённый интерфейс генерации ссылок для поисковых запросов.
Парсеры
YandexSearchLinksParser:
Получает HTML-выдачу с поисковой страницы.
Извлекает все ссылки из результатов поиска.
Выполняет фильтрацию по доменам: исключаются ссылки на ресурсы вроде YouTube, VK и других нерелевантных источников.
Сортирует и нормализует ссылки.
SiteParser:
Обходит полученные сайты и извлекает контактную информацию:
Номера телефонов
Email-адреса
Почтовые адреса
Парсит мета-теги (title, description) для последующей аналитики.
Работает в асинхронном режиме, обрабатывая сразу несколько сайтов параллельно, что значительно ускоряет сбор информации.
Поддерживает отказоустойчивость (например, при ошибке соединения с сайтом парсинг продолжается по другим адресам).
Особенности
RPS (Requests Per Second)
Для обеспечения стабильной работы с API Яндекса реализован контроль частоты запросов.
В дневном и ночном режиме применяется ограничение: не более одного запроса в секунду.
Это требование помогает избежать получения ошибки
429 Too Many Requestsсо стороны Яндекса.Параметры ограничения могут быть конфигурируемыми и легко изменяются при масштабировании.
Ссылка для SearchAPI
Формирование запроса к Yandex Search API осуществляется через функцию:
Функция позволяет гибко задавать параметры локализации, фильтрации, пагинации и группировки результатов. Используется при каждом HTTP-запросе для получения выдачи Яндекса.