Трудно представить себе универсальный парсер, который подходил бы под решения любых, сколько угодно сложных задач. Такого решения нет, и быть не может. Каждая задача по своему уникальная и требует индивидуального подхода. По этому вопрос надо ставить по другому. Есть ли инструмент, который может решать разноплановые задачи благодаря широкому набору инструментов и гибкости настройки? Попробуем дать ответ на этот вопрос.
Как известно, A-Parser имеет целый ряд готовых решений, с помощью которых можно решить большую часть типовых заданий. Но как быть с теми задачами, которые требуют индивидуального подхода? На этот случай в A-Parser существует возможность создания парсеров с помощью языка программирования JavaScript. Благодаря этому, можно создавать собственные полноценные парсеры, со сколько угодно сложной логикой. При этом в JavaScript парсерах можно также использовать весь функционал стандартных парсеров.
Рассмотрим пошаговый пример создания парсера средствами JavaScript. Поставим себе задание: создать парсер, который будет обращаться к стандартному парсеру, получать от него данные и будет делать поиск по полученным результатам нужной нам информации, а после выводить результат в удобном виде.
Согласно документации, определим структуру парсера.
В конструкторе класса "class Parser" => "constructor()" - задаем параметры по умолчанию. Здесь определяем:
version — версию нашего парсера;
results — определяем переменные и массивы с возможными результатами, которые будем получать в результате работы парсера. В нашем случае определим:
Далее определим значение, которые будем выводить по умолчанию:
- переменную flat:[['count', 'Count']] — количество результатов;
- массив arrays: {serp: ['List', [['link', 'Link']]]} — массив ссылок;
Полностью конструктор будет иметь такой вид:
- results_format: "Количество результатов: $count\\n$serp.format('$link\\n')" — значение которые будут выводится по умолчанию;
- SE_Bing_preset: 'default' — пресет который будет стоять по умолчанию;
- this.editableConf = [ ['SE_Bing_preset', ['combobox', 'SE::Bing']],] - параметры, значение которых можно выбирать через интерфейс и передавать в парсер.
Все действия происходят в функции «Parse», который представляет собой генератор, и на любую блокирующую операцию должен возвращать yield (это основное и единственное отличие от обычной функции). Особенность метода:Код:constructor() { this.defaultConf = { version: '0.1.198', results: { flat: [ ['count', 'Count'] ], arrays: { serp: ['List', [['link', 'Link']]] } }, results_format: "Количество результатов: $count\\n$serp.format('$link\\n')", SE_Bing_preset: 'default' }; this.editableConf = [['SE_Bing_preset', ['combobox', 'SE::Bing']]]; }
Для получения результатов от другого, стандартного парсера воспользуемся yield this.parser.request. В качестве аргументов указываем название парсера, название пресета, запрос:
- Метод вызывается для каждого запроса поступившего в обработку;
- Передается set (хэш с запросом и его параметрами) и results (пустая заготовка для результатов);
- Необходимо обязательно вернуть заполненный results, предварительно выставив флаг success
Далее обрабатываем полученный массив результатов:Код:let response = yield this.parser.request('SE::Bing', this.conf.SE_Bing_preset, set.query);
- if(response.info.success == true) — проверяем ответ сервера
- Забираем анкоры с массива «response.serp» и проверяем на вхождение в анкор запроса «set.query». После проверки, помещаем значение в массив с результатами «results.serp.push(response.serp)». В переменную «results.count», помещаем количество найденных совпадений. Полный код будет выглядит так:
3. Обязательно заполняем флаг success, чтобы сообщать A-Parser об "успешной" обработки запроса:Код:if(response.info.success==true) { results.count = 0; for(let i=1; i<response.serp.length; i+=3){ if(response.serp[i].match(set.query)){ if(results.serp !== undefined) results.serp.push(response.serp[i]); results.count++; } } }
После запуска парсера получаем результат:Код:results.success = response.info.success
Полный код парсера можно посмотреть в каталоге.
В данной статье мы рассмотрели пример создания парсера, средствами языка программирования JavaScript. В примере мы увидели как можно получать результаты от готового парсера и манипулируя параметрами, обрабатывать полученные данные. Используя данный набор инструментов можно получать данные с разных стандартных парсеров которые есть в A-Parser. Возможность манипулирования полученными данными и представление результатов в какой угодно форме, показывает всю ширину возможностей которые получает пользователь используя этот функционал.
-
Вступайте в наш Telegram чат: https://t.me/a_parser Нас уже 2600+ и мы растем!Скрыть объявление
Создание JS парсеров. Получение результатов от стандартного парсера
Пример получения результатов от готового парсера внутри JS парсера
Метки: