N8n Extract from File: Полное руководство по извлечению данных из файлов

N8n — это платформа с открытым исходным кодом для автоматизации рабочих процессов (workflow automation), которая позволяет соединять различные приложения и сервисы. Одной из ее ключевых возможностей является извлечение данных из файлов различных форматов. Узел (node) «Extract from File» служит центральным инструментом для этой задачи, позволяя парсить содержимое файлов и преобразовывать его в структурированные данные, пригодные для последующей обработки в рабочем процессе. Этот функционал критически важен для автоматизации таких процессов, как импорт данных, миграция информации, обработка отчетов и интеграция legacy-систем.

Поддерживаемые форматы файлов и их особенности

Узел «Extract from File» поддерживает широкий спектр форматов, каждый из которых обрабатывается с учетом его специфики.

Формат файла Расширения Ключевые параметры обработки в N8n Выходные данные
CSV (Comma-Separated Values) .csv, .txt Разделитель (запятая, точка с запятой, табуляция), наличие заголовка, кодировка символов. Массив JSON-объектов, где ключи берутся из строки заголовка.
HTML (HyperText Markup Language) .html, .htm Селектор (CSS или XPath) для целевых элементов. Возможность извлечения атрибутов (href, src) и текста. Массив значений или объектов с извлеченными данными.
JSON (JavaScript Object Notation) .json Путь к данным (JSONPath). Поддержка сложных вложенных структур. Необработанный JSON, который можно использовать в последующих узлах.
XML (eXtensible Markup Language) .xml Путь к данным (XPath). Обработка атрибутов и текстовых узлов. JSON-представление XML-структуры или массив значений.
Текстовый файл (Plain Text) .txt, .log, .md Регулярные выражения (RegExp) для поиска и извлечения паттернов. Разделение по строкам. Массив строк или объектов, соответствующих группам регулярного выражения.
Двоичные файлы (Binary) .pdf, .docx, .xlsx, .pptx, .jpg, .png Для офисных файлов: извлечение текста, метаданных. Для изображений: извлечение метаданных EXIF, текста через OCR (требует дополнительных узлов). Текст, метаданные в JSON или двоичное представление для дальнейшей обработки.

Детальная настройка узла «Extract from File»

Узел требует настройки нескольких взаимосвязанных параметров для корректной работы. Конфигурация зависит от источника файла и его формата.

Источник файла (Binary Property)

Это самый важный параметр. Узел ожидает получить двоичные данные файла. Источником может быть:

    • Предыдущий узел: Например, узел «Read/Write Files from Disk», «Google Drive», «Dropbox», «SFTP», «HTTP Request» (если он загружает файл).
    • Поле из входящего элемента: Вы выбираете свойство, содержащее двоичные данные (например, `data.binary.file.data`).

    Без корректно указанного двоичного свойства узел не сможет выполнить свою задачу.

    Выбор формата файла (File Format)

    После указания источника необходимо выбрать соответствующий формат файла из выпадающего списка: CSV, HTML, JSON, XML, Text, Binary. Интерфейс узла динамически меняет доступные опции в зависимости от выбранного формата.

    Специфические опции для каждого формата

    Для CSV:
    • Delimiter: Символ-разделитель. По умолчанию запятая. Может быть точкой с запятой, табуляцией (`t`) или другим символом.
    • Enable Header Row: Если включено, первая строка файла интерпретируется как заголовок, и ее значения становятся ключами в выходном JSON. Если выключено, данные возвращаются как массив массивов строк.
    • Ignore Empty Lines: Пропускать пустые строки при обработке.
    Для HTML/XML:
    • Source Data Property: Указывает, содержит ли двоичное свойство сам HTML/XML или путь к файлу.
    • Extraction Values: Таблица для определения правил извлечения. Для каждой цели извлечения задаются:
      • Key: Имя ключа в выходном объекте.
      • CSS Selector / XPath: Селектор для поиска элементов.
      • Return Value: Что извлекать: текст элемента, значение атрибута (например, `href`), HTML-содержимое.
    Для JSON:
    • JSONPath: Язык запросов для навигации по JSON-структуре. Например, `$.items[*].name` извлечет все значения `name` из массива `items`. Если оставить пустым, возвращается весь JSON.
    Для текстовых файлов:
    • Extract Using: Выбор между «Регулярным выражением» и простым разделением «По строкам».
    • Regular Expression: Паттерн RegExp для захвата данных. Флаги (например, `g` для глобального поиска) указываются в отдельном поле.
    • Output Data: Определяет формат вывода: «Массив совпадений» или «Массив групп» (если в RegExp используются захватывающие группы `()`).
    Для двоичных файлов:
    • Data as Object Property: Позволяет извлечь метаданные файла (имя, MIME-тип, размер) в отдельное свойство выходного элемента.
    • Для офисных файлов (.xlsx, .docx): Требуется дополнительная установка соответствующих Community Nodes (например, «Extract From Document»). После установки появляются специфические опции для выбора листов, диапазонов ячеек и т.д.

    Практические примеры рабочих процессов (Workflows)

    Пример 1: Ежедневный импорт CSV-отчета в базу данных

    Цель: Автоматически загружать ежедневный отчет в формате CSV с FTP-сервера, преобразовывать его и добавлять записи в базу данных (например, PostgreSQL).

    • Шаг 1 (Узел FTP): Узел «FTP» подключается к серверу и загружает указанный CSV-файл. Он передает двоичные данные файла следующему узлу.
    • Шаг 2 (Узел Extract from File): Настраивается на получение двоичных данных из предыдущего узла. Формат: CSV. Включена опция «Enable Header Row». Разделитель — точка с запятой, если это требуется. На выходе получается массив объектов, где ключи — названия колонок.
    • Шаг 3 (Узел PostgreSQL): Узел «PostgreSQL» принимает выходные данные. Используется операция «Insert». Поля из выходного JSON маппятся на колонки таблицы в БД. Для обработки массива используется режим выполнения узла «Execute once for each item».

    Пример 2: Парсинг веб-страницы, сохраненной в HTML

    Цель: Извлечь список заголовков новостей и ссылки на них из локально сохраненного HTML-файла.

    • Шаг 1 (Узел Read/Write Files from Disk): Узел «Read File» считывает HTML-файл с диска и передает его содержимое как двоичные данные.
    • Шаг 2 (Узел Extract from File): Формат: HTML. В разделе «Extraction Values» добавляются две цели:
      • Key: `title`, CSS Selector: `h2.news-title`, Return Value: `Text`.
      • Key: `url`, CSS Selector: `a.news-link`, Return Value: `Attribute`, Attribute Name: `href`.

      Узел вернет массив объектов вида `{ «title»: «Новость 1», «url»: «/news/1» }`.

    • Шаг 3 (Узел Google Sheets): Полученный массив записывается строку за строкой в Google Таблицу.

    Пример 3: Обработка JSON-ответа API, сохраненного в файл

    Цель: Проанализировать сложный JSON-файл, полученный от внешнего API, и отфильтровать определенные данные.

    • Шаг 1 (Узел HTTP Request): Выполняет GET-запрос к API, который возвращает JSON. Ответ сохраняется в двоичном формате (или сразу как JSON, но для демонстрации используем файл).
    • Шаг 2 (Узел Extract from File): Формат: JSON. В поле «JSONPath» указывается сложный запрос, например, `$.users[?(@.active==true)].email`. Этот запрос извлечет все адреса электронной почты активных пользователей.
    • Шаг 3 (Узел Set): Структурирует извлеченные данные для следующего шага.
    • Шаг 4 (Узел Email Send): Отправляет сводку по извлеченным данным на почту.

    Обработка ошибок и отладка

    При работе с узлом «Extract from File» часто возникают типовые ошибки. Умение их диагностировать критически важно.

    • «No binary data found» / «Binary property not found»: Узел не получил двоичные данные. Решение: Проверьте, что предыдущий узел действительно выводит двоичные данные. Используйте режим отладки, чтобы просмотреть выходные данные предыдущего узла и корректно указать путь к свойству (например, `data.binary.file.data`).
    • Некорректная кодировка (для CSV/Text): Появляются «кракозябры». Решение: Убедитесь, что кодировка файла (часто UTF-8 или Windows-1251) соответствует ожиданиям. В N8n можно указать кодировку в дополнительных опциях узла.
    • Ошибка парсинга JSON/XML: Файл содержит синтаксическую ошибку. Решение: Проверьте валидность файла с помощью внешних валидаторов. Убедитесь, что файл не поврежден при передаче.
    • Пустой результат после извлечения из HTML: Селектор не находит элементов. Решение: Убедитесь, что структура HTML соответствует ожидаемой. Используйте браузерные инструменты разработчика (Inspector) для проверки корректности CSS-селектора или XPath.
    • Проблемы с большими файлами: N8n может столкнуться с ограничениями памяти. Решение: Для очень больших CSV или XML-файлов рассмотрите возможность потоковой обработки с помощью специализированных узлов или предварительной разбивки файла.

    Интеграция с другими узлами N8n

    «Extract from File» редко используется изолированно. Его сила раскрывается в комбинации с другими узлами:

    • Узлы хранения: «Google Drive», «Dropbox», «S3», «SFTP», «Read/Write Files from Disk» — для получения исходных файлов.
    • Узлы баз данных: «PostgreSQL», «MySQL», «MongoDB» — для сохранения извлеченных структурированных данных.
    • Узлы для работы с данными: «Set», «Aggregate», «Filter», «Sort» — для преобразования и очистки данных после извлечения.
    • Узлы приложений: «Gmail», «Telegram», «Slack», «Microsoft Teams» — для отправки уведомлений или отчетов на основе извлеченных данных.
    • Узлы преобразования форматов: «Convert to File» — для обратной конвертации данных в файл после обработки.

    Расширенные возможности и Community Nodes

    Базовая функциональность N8n может быть расширена за счет Community Nodes — узлов, созданных сообществом. Для работы с файлами особенно полезны:

    • Extract From Document: Позволяет более гибко извлекать текст и данные из PDF, DOCX, XLSX, PPTX, включая извлечение текста из конкретных страниц, диапазонов ячеек или слайдов.
    • OCR: Узлы для оптического распознавания символов (например, «Tesseract.js») позволяют извлекать текст из изображений (JPG, PNG, сканов PDF). Такие узлы обычно принимают на вход двоичные данные изображения, полученные, в том числе, из «Extract from File».

Часто задаваемые вопросы (FAQ)

Можно ли извлечь данные из файла, который пришел в виде вложения в письме?

Да, это стандартный сценарий. Используйте узел «Gmail» или «IMAP» для получения письма. Выходные данные этих узлов содержат двоичные данные вложений. Эти данные нужно передать в узел «Extract from File», указав правильный путь к binary property (например, `data.binary[«attachment-name.xlsx»].data`).

Как обрабатывать файлы, где данные начинаются не с первой строки (например, есть «шапка» отчета)?

Для CSV: Можно сначала обработать файл как простой текст (формат «Text»), использовать регулярное выражение или разделение по строкам, чтобы пропустить нужное количество строк, а затем оставшуюся часть строк обработать через второй узел «Extract from File» (CSV) или с помощью узла «Code» (JavaScript). Альтернативно, извлечь весь CSV, а затем с помощью узла «Filter» удалить ненужные строки.

Поддерживает ли N8n потоковую обработку очень больших файлов, чтобы не загружать их полностью в память?

Стандартный узел «Extract from File» загружает весь файл в память. Для потоковой обработки больших CSV или XML-файлов рекомендуется искать специализированные Community Nodes, которые используют потоковые парсеры (например, на основе sax или csv-parser). Другой подход — использовать узел «Code» (среды выполнения Node.js) для реализации кастомной потоковой логики.

Можно ли извлечь данные не из всего файла, а только из определенной его части (например, со 2-й по 5-ю страницу PDF)?

Базовый узел «Extract from File» в формате «Binary» этого не позволяет. Для этого необходимо установить Community Node, например, «Extract From Document». После его установки появятся соответствующие опции для выбора диапазона страниц (для PDF/DOCX) или ячеек (для XLSX).

Как правильно настроить регулярное выражение для извлечения данных из текстового лог-файла?

В поле «Regular Expression» укажите паттерн с захватывающими группами `()`. Например, для строк лога вида `[2023-10-05] ERROR: Connection failed` используйте выражение `^[(.?)] (.?): (.*)$`. Включите флаг `gm` (глобальный, многострочный). В опции «Output Data» выберите «Matches», чтобы получить массив, где каждый элемент — массив с полным совпадением и всеми группами.

Что делать, если файл имеет нестандартный разделитель в CSV, например, вертикальную черту «|»?

В настройках узла «Extract from File» для формата CSV в поле «Delimiter» укажите символ `|`. Если разделитель представляет собой последовательность символов или табуляция, можно использовать escape-последовательности: для табуляции — `t`.

Как сохранить извлеченные данные обратно в файл другого формата?

После узла «Extract from File» используйте узел «Convert to File». Он может получить на вход JSON-данные (например, массив объектов из CSV) и конвертировать их в файлы форматов CSV, HTML, XLSX, PDF и др. Далее, полученный двоичный файл можно сохранить на диск или в облачное хранилище с помощью соответствующих узлов.

Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Войти

Зарегистрироваться

Сбросить пароль

Пожалуйста, введите ваше имя пользователя или эл. адрес, вы получите письмо со ссылкой для сброса пароля.