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`).
- Delimiter: Символ-разделитель. По умолчанию запятая. Может быть точкой с запятой, табуляцией (`t`) или другим символом.
- Enable Header Row: Если включено, первая строка файла интерпретируется как заголовок, и ее значения становятся ключами в выходном JSON. Если выключено, данные возвращаются как массив массивов строк.
- Ignore Empty Lines: Пропускать пустые строки при обработке.
- Source Data Property: Указывает, содержит ли двоичное свойство сам HTML/XML или путь к файлу.
- Extraction Values: Таблица для определения правил извлечения. Для каждой цели извлечения задаются:
- Key: Имя ключа в выходном объекте.
- CSS Selector / XPath: Селектор для поиска элементов.
- Return Value: Что извлекать: текст элемента, значение атрибута (например, `href`), HTML-содержимое.
- 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»). После установки появляются специфические опции для выбора листов, диапазонов ячеек и т.д.
- Шаг 1 (Узел FTP): Узел «FTP» подключается к серверу и загружает указанный CSV-файл. Он передает двоичные данные файла следующему узлу.
- Шаг 2 (Узел Extract from File): Настраивается на получение двоичных данных из предыдущего узла. Формат: CSV. Включена опция «Enable Header Row». Разделитель — точка с запятой, если это требуется. На выходе получается массив объектов, где ключи — названия колонок.
- Шаг 3 (Узел PostgreSQL): Узел «PostgreSQL» принимает выходные данные. Используется операция «Insert». Поля из выходного JSON маппятся на колонки таблицы в БД. Для обработки массива используется режим выполнения узла «Execute once for each item».
- Шаг 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 Таблицу.
- Шаг 1 (Узел HTTP Request): Выполняет GET-запрос к API, который возвращает JSON. Ответ сохраняется в двоичном формате (или сразу как JSON, но для демонстрации используем файл).
- Шаг 2 (Узел Extract from File): Формат: JSON. В поле «JSONPath» указывается сложный запрос, например, `$.users[?(@.active==true)].email`. Этот запрос извлечет все адреса электронной почты активных пользователей.
- Шаг 3 (Узел Set): Структурирует извлеченные данные для следующего шага.
- Шаг 4 (Узел Email Send): Отправляет сводку по извлеченным данным на почту.
- «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-файлов рассмотрите возможность потоковой обработки с помощью специализированных узлов или предварительной разбивки файла.
- Узлы хранения: «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» — для обратной конвертации данных в файл после обработки.
- Extract From Document: Позволяет более гибко извлекать текст и данные из PDF, DOCX, XLSX, PPTX, включая извлечение текста из конкретных страниц, диапазонов ячеек или слайдов.
- OCR: Узлы для оптического распознавания символов (например, «Tesseract.js») позволяют извлекать текст из изображений (JPG, PNG, сканов PDF). Такие узлы обычно принимают на вход двоичные данные изображения, полученные, в том числе, из «Extract from File».
Без корректно указанного двоичного свойства узел не сможет выполнить свою задачу.
Выбор формата файла (File Format)
После указания источника необходимо выбрать соответствующий формат файла из выпадающего списка: CSV, HTML, JSON, XML, Text, Binary. Интерфейс узла динамически меняет доступные опции в зависимости от выбранного формата.
Специфические опции для каждого формата
Для CSV:
Для HTML/XML:
Для JSON:
Для текстовых файлов:
Для двоичных файлов:
Практические примеры рабочих процессов (Workflows)
Пример 1: Ежедневный импорт CSV-отчета в базу данных
Цель: Автоматически загружать ежедневный отчет в формате CSV с FTP-сервера, преобразовывать его и добавлять записи в базу данных (например, PostgreSQL).
Пример 2: Парсинг веб-страницы, сохраненной в HTML
Цель: Извлечь список заголовков новостей и ссылки на них из локально сохраненного HTML-файла.
Пример 3: Обработка JSON-ответа API, сохраненного в файл
Цель: Проанализировать сложный JSON-файл, полученный от внешнего API, и отфильтровать определенные данные.
Обработка ошибок и отладка
При работе с узлом «Extract from File» часто возникают типовые ошибки. Умение их диагностировать критически важно.
Интеграция с другими узлами N8n
«Extract from File» редко используется изолированно. Его сила раскрывается в комбинации с другими узлами:
Расширенные возможности и Community Nodes
Базовая функциональность N8n может быть расширена за счет Community Nodes — узлов, созданных сообществом. Для работы с файлами особенно полезны:
Часто задаваемые вопросы (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 и др. Далее, полученный двоичный файл можно сохранить на диск или в облачное хранилище с помощью соответствующих узлов.
Комментарии