Перейти к основному содержимому

Парсеры на JavaScript: Обзор возможностей

JavaScript парсеры - это возможность создавать собственные полноценные парсеры со сколько угодно сложной логикой, используя язык JavaScript. При этом в JS парсерах можно также использовать весь функционал стандартных парсеров.

Особенности#

Используя всю мощь A-Parser теперь можно написать свой парсер/регер/постер со сколько угодно сложной логикой. Для написания кода используется JavaScript с возможностями ES6 (движок v8).

Код парсеров максимально лаконичен, позволяет сосредоточится на написании логики; работу с многопоточностью, сетью, прокси, результатами, логами и т.д. A-Parser берет на себя. Код можно писать прямо в интерфейсе парсера, добавив новый парсер в Редакторе парсеров. Также для написания парсеров можно использовать сторонние редакторы, например VSCode.

Используется автоматическое версионирование при сохранении кода парсера через встроенный редактор.

info

Работа с JavaScript парсерами доступна для лицензий Pro и Enterprise

Доступ к Редактору JS парсеров#

Если А-Парсер используется удаленно, то в целях безопасности Редактор JS парсеров по умолчанию не доступен. Чтобы открыть к нему доступ, необходимо:

  • установить пароль
  • добавить в config/config.txt следующую строчку: allow_javascript_editor: 1
  • перезапустить А-Парсер

Инструкция по работе#

В Редакторе парсеров создаем новый парсер и задаем имя парсера. По умолчанию будет загружен простой пример, на основе которого можно быстро приступить к созданию собственного парсера.

info

Если для написания кода используется сторонний редактор, то нужно открыть файл редактируемого парсера в папке /parsers/

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

Созданный парсер можно в любой момент редактировать. Все изменения, касающиеся интерфейса, появятся после повторного выбора парсера в списке парсеров или перезапуска А-Парсера; изменения в логике парсера применяются при повторном запуске задания с парсером.

Для каждого созданного парсера по умолчанию отображается стандартная иконка, можно добавить свою в формате png или ico, разместив ее в папке парсера в /parsers/:

Общие принципы работы#

По умолчанию создается пример простого парсера, готовый для дальнейшего редактирования:

class Parser {
constructor() {
this.defaultConf = {
results: {
flat: [
['title', 'HTML title'],
]
},
results_format: '$query: $title\\n',
parsecodes: {
200: 1,
},
max_size: 200 * 1024,
};
}
*parse(set, results) {
this.logger.put("Start scraping query: " + set.query);
let response = yield this.request('GET', set.query, {}, {
check_content: ['<\/html>'],
decode: 'auto-html',
});
if(response.success) {
let matches = response.data.match(/<title>(.*?)<\/title>/i);
if(matches)
results.title = matches[1];
}
results.success = response.success;
return results;
}
}

Конструктор вызывается однократно для каждого задания. Необходимо обязательно задать this.defaultConf.results и this.defaultConf.results_format, остальные поля необязательны и будут принимать значения по-умолчанию.

Массив this.editableConf определяет какие настройки могут быть изменены пользователем из интерфейса A-Parser. Можно использовать следующие типы полей:

  • combobox - выпадающее меню выбора. Также можно сделать меню выбора пресета стандартного парсера, например:
['Util_AntiGate_preset', ['combobox', 'AntiGate preset']]
  • combobox с возможностью множественного выбора. Нужно дополнительно задать параметр {'multiSelect': 1}:
['proxyCheckers', ['combobox', 'Proxy Checkers', {'multiSelect': 1}, ['*', 'All']]]
  • checkbox - чекбокс, для параметров которые могут иметь только 2 значения (true/false)
  • textfield - текстовое поле
  • textarea - текстовое поле с многострочным вводом

Метод *parse представляет собой генератор, и на любую блокирующую операцию должен возвращать yield (это основное и единственное отличие от обычной функции). Метод вызывается для каждого запроса поступившего в обработку. Обязательно передается set (хэш с запросом и его параметрами) и results (пустая заготовка для результатов). Также обязательно необходимо вернуть заполненый results, предварительно выставив флаг success.

Автоматическое версионирование#

Версия имеет формат: Major.Minor.Revision

this.defaultConf = {
version: '0.1.1',
...
}

Значение Revision (последняя цифра) автоматически увеличивается при каждом сохранении. Остальные значения (Major, Minor) можно менять вручную, а также сбрасывать Revision в 0.

tip

Если по каким то причинам необходимо менять Revision только вручную, то версию необходимо заключить в двойные кавычки ""

Полезные ссылки#

Примеры и обсуждение

Тема на форуме с примерами и обсуждением функционала JS парсеров

Каталог JS парсеров

Раздел в каталоге ресурсов, посвященный JS парсерам

Обзор базовых возможностей ES6

Статья на habrahabr посвященная обзору базовых возможностей ES6

Последнее обновление