Парсеры 1.1 Help

Архитектура и принципы работы

Данная статья описывает ключевые компоненты архитектуры проекта, а также принципы работы, лежащие в основе обработки запросов, парсинга данных и решения капчи. Проект ориентирован на асинхронную обработку запросов и высокую производительность. Архитектура использует современные библиотеки и подходы для создания надежной и масштабируемой системы, обеспечивающей автоматический сбор и обработку данных с различных источников, таких как ФНС России.

Ключевые компоненты

aiohttp

  • Роль: Взаимодействие с API ФНС.

  • Особенности реализации:

    • Клиент с сессиями (ClientSession): Использование сессий для упрощения и ускорения запросов.

    • Ограничение RPS: Использование Semaphore для ограничения количества запросов в секунду (Rate Limit).

    • Таймауты и повторные попытки при ошибках: Реализация механизма повторных попыток с учетом таймаутов, чтобы обеспечить устойчивость работы при нестабильных соединениях.

    • Пакетная обработка запросов через asyncio.gather: Это позволяет эффективно параллелить запросы, снижая время ожидания ответа.

OpenCV + TensorFlow

  • Капча-солвер:

    • Модель с точностью 68% (.keras формат): Используется для распознавания капчи.

    • Предобработка изображений:

      • Бинаризация (THRESH_BINARY): Преобразование изображения в черно-белое для улучшения качества обработки.

      • Удаление шумов (fastNlMeansDenoising): Очищает изображение от шума для более точного распознавания.

      • Контурный анализ (findContours): Находит контуры на изображении для выделения текста.

    • Распознавание посимвольно через CNN: Модели сверточных нейронных сетей для точного распознавания символов в капче.

Asyncio

  • Паттерны использования:

    • Асинхронные цепочки запросов (поиск → капча → парсинг): Позволяют эффективно обрабатывать несколько этапов запросов и операций одновременно.

    • Фоновые задачи через asyncio.create_task: Обработка задач в фоновом режиме для улучшения производительности и многозадачности.

    • Координация через:

      • Semaphore: Ограничение параллельных запросов, чтобы не превышать лимиты сервера.

      • asyncio.gather: Позволяет параллельно выполнять несколько асинхронных операций, минимизируя время ожидания.

      • asyncio.wait: Управление таймаутами для операций, чтобы избежать зависаний или долгих ожиданий.

Описание классов

CaptchaSolver

Назначение: Решение капчи с помощью ML-модели (точность 68%).

Методы:

  • solve() -> str: Основной метод распознавания текста капчи, который сначала обрабатывает изображение через пороговую обработку, удаляет шумы и анализирует контуры, а затем распознает символы с помощью модели.

NalogParserApi

Назначение: Базовый клиент API ФНС с обработкой капчи.

Методы:

  • _solve_captcha() -> str: Получение и распознавание капчи с использованием модели.

  • _get_search_id() -> str: Запрос ID поиска для начала парсинга.

  • _try_get_search_id_through_captcha() -> str: Повторная попытка получения ID поиска в случае ошибки капчи.

NalogParser

Назначение: Основной парсер данных ФНС.

Методы:

  • search(query: str) -> list[SearchResult]: Поиск организаций по запросу, который обрабатывается через API ФНС.

  • __try_search(search_id: str): Обработка ошибок запроса, если при попытке поиска произошли сбои.

  • __search(search_id: str): Получение результатов поиска для дальнейшего анализа и обработки.

12 April 2025