Files
osint_parser_ada/arch.md
T

4.2 KiB

Архитектура проекта

Ниже — схема на уровне компонентов в формате, аналогичном примеру.

                 [CLI (main.py / run.fish / run.sh / run_cron.fish)]
                                   |
                                   v
               Fetcher — загрузка HTML и проверка кода ответа
                     [Fetcher: HTTP GET (requests.Session)]
                             (timeout / retries / delay)
                                   |
                                   v
    • Parser      — извлечение таблиц/списков и распознавание колонок (BS4+lxml)
    • Normalizer  — очистка значений, trim, удаление префиксов, приведение типов/дат
    • Model       — маппинг в dataclasses (Auditor, Organization, …)
    • Exporter    — выгрузка pandas.DataFrame в Excel через openpyxl
                                   |
                                   v
[Pipeline]
[Parser (BeautifulSoup + эвристики)] --> [Normalizer] --> [Model] --> [DataFrame] --> [Exporter (XLSX)]

Соответствие компонент файлам

  • CLI / запуск:

    • main.py — CLI-меню, режим неинтерактивного запуска через аргументы (--registry, --mode, --list).
    • run.fish, run.sh — быстрый старт; run_cron.fish — обёртка для cron (Fish).
  • Fetcher:

    • parsers/base_parser.pyBaseParser._make_request() (requests.Session, заголовок User-Agent, таймаут, задержка, повторные попытки).
    • Пагинация: BaseParser._get_pagination_urls().
  • Parser:

    • Специализированные: parsers/auditors_parser.py, parsers/organizations_parser.py.
    • Универсальный: parsers/generic_parser.py (табличные реестры, автоматическое определение заголовков).
    • Общая точка входа: BaseParser.parse_registry(detailed=...).
  • Normalizer:

    • Локальные шаги очистки/приведения: обрезка пробелов, извлечение чисел/дат, нормализация полей (внутри парсеров).
    • Приведение к словарям/рубрикам, единообразные ключи для экспорта.
  • Model:

    • models/auditor.py, models/organization.py, и др. — dataclasses, метод to_dict() для экспорта.
  • DataFrame + Exporter:

    • Формирование pandas.DataFrame и экспорт: utils/excel_exporter.pyExcelExporter.export_to_excel().
    • Форматирование XLSX (ширина колонок, шапка, стили): ExcelExporter._format_excel().
  • Конфигурация и логирование:

    • config.py — URL реестров (REGISTRIES), сетевые и экспортные настройки (PARSER_CONFIG, EXPORT_CONFIG, LOGGING_CONFIG).
    • utils/logger.py — консольный и файловый логгеры (logs/parser_YYYY-MM-DD.log).

Потоки выполнения

  • Режим запуска:

    • Интерактивный CLI: выбор реестра и детализации из меню (main.py).
    • Неинтерактивный (для cron): python main.py --registry <key> --mode <quick|full>.
  • Детализация:

    • mode=quick — первая страница (без обхода пагинации и детальных карточек).
    • mode=full — все страницы (пагинация) и, при поддержке, парсинг детальных карточек записей.
  • Надёжность:

    • Повторные попытки при ошибках сети, управляемая задержка между запросами.
    • Логи INFO/DEBUG в консоль и файл.
  • Выходные данные:

    • Сырые записи → нормализованные словари → модели (dataclasses) → pandas.DataFrame → XLSX в data/exports/.