Объектная модель парсера

Эта статья демонстрирует, что находится «под капотом» программы-парсера, — для тех, кому это интересно.

Parser [WebsiteParser] Корневой объект парсера

Name [String] Имя парсера

Description [String] Описание парсера

URL [String] URL инструкции с описанием этого парсера

filename [String] Путь к файлу настроек парсера (.xlp)

Version [String] Версия настроек парсера

AppVersion [Long] Версия программы, в которой сохранен парсер

MinAppVersion [Long] Минимально необходимая версия программы

FileFormat [Long] Версия формата файла (0 — XML, 2 — JSON)

BuildIn [Boolean] Флаг встроенного в лист Excel парсера

ExternalStart [Boolean] Флаг запуска из другого парсера

Sheet [Worksheet] Целевой лист Excel для вывода результатов

Parent [WebsiteParser] Ссылка на родительский парсер (если запущен из другого парсера)

Options [ParserOptions] Общие настройки парсера, таймауты, кэш, работа с файлами Excel

LoadMode [Long] Способ загрузки страниц по умолчанию (WinHTTP, IE, Browser)

RequestTimeout [Long] Таймаут HTTP-запроса в секундах

Pause [Single] Пауза между обработкой исходных значений в секундах

UseCache [Long] Использование кэширования запросов

UseFileCache [Boolean] Использование файлового кэша

RemoveScripts [Boolean] Удалять теги <script> из загруженного HTML

RemoveIFrames [Boolean] Удалять теги <iframe> из загруженного HTML

ShowErrors [Boolean] Показывать всплывающие уведомления об ошибках

RetryCountOnError [Long] Количество повторных попыток запроса при ошибке

Workbook_Filename [String] Путь к книге Excel для открытия или сохранения

Workbook_Create [Boolean] Создавать новую книгу, если файл не найден

Workbook_Save [Boolean] Сохранять книгу после завершения работы парсера

ResourceFileList [Dictionary] Словарь имен подключенных файлов ресурсов

SourceData [ParserSourceData] Настройки источника исходных данных

Mode [PARSER_SOURCES] Режим источника (столбец, диапазон чисел, фикс. значение и др.)

SourceSheet [Worksheet] Лист Excel с исходными данными

ColumnMode_Column [Long] Номер столбца с исходными данными

ColumnMode_FirstRow [Long] Начальная строка с данными

NumRangeMode_MinValue [Long] Начальное значение диапазона чисел

NumRangeMode_MaxValue [Long] Конечное значение диапазона чисел

NumRangeMode_Step [Long] Шаг изменения числа

FixedValueMode_Value [String] Фиксированное исходное значение или список значений

FoundColumnMode_Find_Text [String] Текст заголовка для поиска столбца

SheetRangeMode_Find_Text [String] Маска поиска ячеек или гиперссылок на листе

ActiveItem [ParserSourceItem] Текущий обрабатываемый элемент исходных данных

index [Long] Порядковый номер элемента

Value [String] Значение исходного элемента (URL, текст, число)

SheetRangeMode_Cell [Range] Ссылка на исходную ячейку в режиме поиска по листу

Items [ParserSourceItem] Все инициализированные элементы исходных данных

index [Long] Порядковый номер элемента

Value [String] Значение исходного элемента (URL, текст, число)

Actions [ArrayActions] Цепочка действий по обработке исходных данных (Уровень 1)

ActiveLevel [Long] Уровень вложенности, активный в редакторе

InTest [Boolean] Флаг выполнения в режиме тестирования

Items [ArrayAction] Список действий текущего уровня

index [Long] Порядковый номер действия в списке

Name [String] Отображаемое название функции

Codename [String] Системное кодовое имя функции

Category [FUNCTION_CATEGORIES] Категория функции (HTML, Текст, Массив и др.)

Enabled [Boolean] Флаг активности действия

EnabledForTestMode [Boolean] Выполнять только в режиме тестирования

Comment [String] Комментарий пользователя к действию

parameters [ArrayActionParameter] Параметры конкретного действия

Name [String] Системное имя параметра

Value [String] Заданное значение параметра

DefaultValue [String] Значение по умолчанию

Description [String] Описание параметра для интерфейса

Style [ActionParameterStyles] Тип элемента управления (текст, список, цвет)

SubActions [ArrayActions] Рекурсивный подуровень действий (Уровень 2, 3, ... N)

Columns [OutputColumns] Настройки вывода результатов на лист Excel

Enabled [Boolean] Включен ли вывод результатов на лист

AutoOrder [Boolean] Автоматическая нумерация столбцов по порядку

AutoOrder_FirstColumn [Long] Начальный столбец при автонумерации

OutputArrayValuesToSeparateRows [Boolean] Выводить каждый элемент массива в отдельную строку

SearchForRow [Boolean] Режим поиска существующей строки для обновления

SearchForRow_Column [Long] Номер столбца для поиска строки

SearchForRow_Text [String] Искомое значение для идентификации строки

SheetOptions [OutputSheetOptions] Параметры листа (заголовки, очистка, FastOutput, высота строк)

HeaderRowNumber [Long] Номер строки заголовков таблицы

BaseColumn [Long] Базовый столбец для определения последней строки

ClearSheetOnStart [Boolean] Очищать лист перед запуском парсера

CreateNewWorkbook [Boolean] Создавать новую книгу Excel для результатов

OutputColumnsNames [Boolean] Выводить названия столбцов в строку заголовков

FormatColumns [Boolean] Применять форматирование к столбцам

FastOutput [Boolean] Режим буферизованной быстрой записи массивом

ScreenUpdatingInterval [Long] Интервал обновления экрана (в строках)

Actions [ArrayActions] Общие действия перед выводом во все столбцы

Items [ArrayAction] Список действий текущего уровня

parameters [ArrayActionParameter] Параметры конкретного действия

SubActions [ArrayActions] Рекурсивный подуровень действий (Уровень 2, 3, ... N)

Items [OutputColumn] Коллекция настроенных столбцов вывода

index [Long] Порядковый номер столбца в списке

Column [Long] Номер столбца на листе Excel

Name [String] Заголовок столбца

Codename [String] Кодовое имя столбца

Enabled [Boolean] Вычислять ли значение для этого столбца

OutputEnabled [Boolean] Выводить ли вычисленное значение на лист

MulticolumnEnabled [Boolean] Вывод элементов массива в несколько столбцов

DynamicColumns [Boolean] Автоматическое создание столбцов (формат Имя|Значение)

Format [OutputColumnFormat] Форматирование ячейки (ширина, гиперссылки, примечания, вставка фото)

Enabled [Boolean] Активно ли форматирование столбца

ColumnWidth [Single] Ширина столбца в символах

WrapText [Boolean] Перенос текста по словам

HorizontalAlignment [Long] Горизонтальное выравнивание текста

FontBold [Boolean] Полужирное начертание шрифта

NumberFormat [String] Числовой формат ячейки Excel

HeaderColor [Long] Цвет заливки заголовка столбца

HyperlinkEnable [Boolean] Выводить значение в виде гиперссылки

CommentEnable [Boolean] Добавлять примечание к ячейке

PasteImage [Boolean] Вставлять изображение в ячейку по ссылке

Actions [ArrayActions] Индивидуальные действия для вычисления значения конкретного столбца

Items [ArrayAction] Список действий текущего уровня

parameters [ArrayActionParameter] Параметры конкретного действия

SubActions [ArrayActions] Рекурсивный подуровень действий (Уровень 2, 3, ... N)

Downloads [ParserDownloads] Настройки скачивания файлов

Enabled [Boolean] Включена ли загрузка файлов

nOK [Long] Счетчик успешно скачанных файлов

nERR [Long] Счетчик ошибок при скачивании

Actions [ArrayActions] Общие действия перед скачиванием всех файлов

Items [ArrayAction] Список действий текущего уровня

parameters [ArrayActionParameter] Параметры конкретного действия

SubActions [ArrayActions] Рекурсивный подуровень действий (Уровень 2, 3, ... N)

Items [ParserDownload] Коллекция заданий на скачивание

index [Long] Порядковый номер задания

Name [String] Название загрузки

Enabled [Boolean] Флаг активности загрузки

folder [String] Папка для сохранения скачанных файлов

FilenameMode [DOWNLOAD_FILENAME_MODES] Режим формирования имени файла (Авто, Маска, Оригинал)

FilenameMask [String] Шаблон имени файла (например, image_{2}.jpg)

NeedAuth [Boolean] Использовать WinHTTP с авторизацией/cookies для скачивания

POST_Enabled [Boolean] Скачивать файл с помощью POST-запроса

IgnoreErrors [Boolean] Игнорировать ошибки при скачивании

OpenFolderOnFinish [Boolean] Открыть папку с файлами после завершения парсера

Actions [ArrayActions] Действия для формирования URL конкретного файла

Items [ArrayAction] Список действий текущего уровня

parameters [ArrayActionParameter] Параметры конкретного действия

SubActions [ArrayActions] Рекурсивный подуровень действий (Уровень 2, 3, ... N)

AASets [ActionSets] Именованные наборы действий (события: BeforeStart, OnStart, OnFinish и др.)

Items [ActionSet] Встроенные в парсер наборы действий

index [Long] Порядковый номер набора

Name [String] Уникальное имя набора действий

Description [String] Описание назначения набора

SetType [String] Тип набора действий

Actions [ArrayActions] Список действий внутри набора

Items [ArrayAction] Список действий текущего уровня

parameters [ArrayActionParameter] Параметры конкретного действия

SubActions [ArrayActions] Рекурсивный подуровень действий (Уровень 2, 3, ... N)

ExtraItems [ActionSet] Внешние наборы действий, подгружаемые из файлов ресурсов

Name [String] Имя внешнего набора действий

Source [String] Имя файла ресурсов, из которого загружен набор

ObjectID [String] Идентификатор объекта в файле ресурсов

Actions [ArrayActions] Список действий внутри набора

Items [ArrayAction] Список действий текущего уровня

parameters [ArrayActionParameter] Параметры конкретного действия

SubActions [ArrayActions] Рекурсивный подуровень действий (Уровень 2, 3, ... N)

Variables [Variables] Пользовательские переменные и элементы UI для их ввода

Items [Variable] Отдельная переменная (TextBox, ComboBox, CheckBox, ListBox)

index [Long] Порядковый номер переменной

Name [String] Имя переменной (используется как %Name%)

Value [String] Текущее значение переменной

DefaultValue [String] Значение по умолчанию

ControlType [String] Тип визуального элемента управления (TextBox, ComboBox, CheckBox, ListBox)

LabelText [String] Подпись элемента на форме

Source [Variant] Список значений для выпадающих списков

Hidden [Boolean] Скрывать ли переменную в интерфейсе пользователя

DoNotSaveValue [Boolean] Не сохранять введенное значение в файле парсера

Macros [ParserMacros] Встроенные VBA-макросы парсера

Items [ParserMacro] Отдельный макрос (имя и исходный код)

index [Long] Порядковый номер макроса

Name [String] Название процедуры макроса

code [String] Исходный VBA-код макроса

Proxy [ProxyServers] Настройки прокси-серверов и ротации

Enabled [Boolean] Включено ли использование прокси

ActiveProxy [ProxyServer] Текущий активный прокси-сервер

SwitchInCountEnabled [Boolean] Переключать прокси по количеству запросов

SwitchInCount [Long] Количество запросов до смены прокси

Attempts [Long] Макс. количество попыток смены прокси для одного URL

Reuse [Boolean] Использовать список прокси повторно по кругу

Check_URL [String] URL для проверки работоспособности прокси

Items [ProxyServer] Список всех прокси-серверов

index [Long] Порядковый номер прокси в списке

Address [String] Адрес прокси (IP:Port или Login:Pass@IP:Port)

QueriesOK [Long] Количество успешных запросов через прокси

QueriesERR [Long] Количество неудачных запросов

Locked [Boolean] Флаг временной блокировки прокси

Captcha [CaptchaOptions] Настройки обнаружения и обхода капчи

Enabled [Boolean] Включена ли проверка на наличие капчи

DetectionText [String] Текст-признак капчи в коде страницы

Handler [String] Имя набора действий для распознавания капчи

Attempts [Long] Макс. количество попыток распознавания капчи

ReloadPage [Boolean] Перезагружать ли страницу после решения капчи

Resources [ResourceFiles] Управление подключенными внешними файлами ресурсов (.xlr)

ObjectsCache [Dictionary] Кэш загруженных объектов ресурсов

Items [ResourceFile] Файл ресурсов

Name [String] Имя файла ресурсов

filename [String] Полный путь к файлу ресурсов (.xlr)

Items [ResourceFileObject] Объекты внутри ресурса (Column, Download, ActionSet, Macro)

ID [String] Уникальный идентификатор объекта в файле

Name [String] Название объекта

ObjectType [String] Тип объекта (Column, Download, ActionSet, Macro)

content [String] XML-содержимое сериализованного объекта

Детальное описание узлов и связей объектной модели WebsiteParser

1. Контейнеры списков действий (ArrayActions → ArrayAction → ArrayActionParameter)

Этот блок является универсальным строительным блоком всей архитектуры парсера. Он встраивается в SourceData, Columns (и каждый OutputColumn), Downloads (и каждый ParserDownload), а также в каждый набор действий ActionSet:

  • ArrayActions — управляющий контейнер списка действий. Имеет свойство SubActions (и обратную ссылку ParentActions), что формирует связный список вложенных уровней (Уровень 1 → Уровень 2 → Уровень N) для поэтапного парсинга (например: рубрика → список товаров → карточка товара).
  • ArrayAction — конкретная команда (функция парсера или плагина) со свойствами Codename, Category, Enabled и коллекцией parameters.
  • ArrayActionParameter — аргумент действия, описывающий его имя, значение, тип визуального элемента управления (ActionParameterStyles) и список допустимых значений.

2. Поток обработки данных (SourceData → Downloads → Columns)

  • ParserSourceData — определяет режим получения входных данных (ps_Column, ps_FoundColumn, ps_SheetRange, ps_NumericRange, ps_FixedValue) и генерирует коллекцию Items из объектов ParserSourceItem. Каждый ParserSourceItem хранит само значение (Value) и привязку к исходной строке или ячейке листа.
  • ParserDownloads — содержит общие Actions и коллекцию задач ParserDownload, каждая из которых управляет авторизацией, POST-запросами, масками имен файлов и обработкой ошибок при скачивании.
  • OutputColumns — управляет выводом данных на лист Excel. Включает глобальные настройки листа (OutputSheetOptions), поддержку буферизованной быстрой записи в память (режим FastOutput) и коллекцию столбцов OutputColumn, каждый со своим форматированием (OutputColumnFormat).

3. Инфраструктурные и сервисные модули

  • ActionSets — разделяет именованные наборы действий на локальные (Items, сохраняются внутри файла парсера) и внешние (ExtraItems, загружаются динамически при инициализации Resources).
  • ResourceFiles — связывает парсер с внешними библиотеками объектов (ResourceFile → ResourceFileObject), которые при загрузке конвертируются в стандартные объекты OutputColumn, ParserDownload, ActionSet или ParserMacro.
  • ProxyServers — управляет пулом объектов ProxyServer, отслеживает статистику успешных и ошибочных запросов (QueriesOK, QueriesERR) и отвечает за переключение активного прокси (ActiveProxy).
  • Variables — хранит коллекцию объектов Variable, которые содержат значения для подстановки при выполнении парсера и умеют динамически генерировать элементы интерфейса (TextBox, ComboBox, ListBox, CheckBox) на форме настройки.