Трудно представить себе универсальный парсер, который подходил бы под решения любых, сколько угодно сложных задач. Такого решения нет, и быть не может. Каждая задача по своему уникальная и требует индивидуального подхода. По этому вопрос надо ставить по другому. Есть ли инструмент, который может решать разноплановые задачи благодаря широкому набору инструментов и гибкости настройки? Попробуем дать ответ на этот вопрос.
Как известно, A-Parser имеет целый ряд готовых решений, с помощью которых можно решить большую часть типовых заданий. Но как быть с теми задачами, которые требуют индивидуального подхода? На этот случай в A-Parser существует возможность создания парсеров с помощью языка программирования JavaScript. Благодаря этому, можно создавать собственные полноценные парсеры, со сколько угодно сложной логикой. При этом в JavaScript парсерах можно также использовать весь функционал стандартных парсеров.
Рассмотрим пошаговый пример создания парсера средствами JavaScript. Поставим себе задание: создать парсер, который будет обращаться к стандартному парсеру, получать от него данные и будет делать поиск по полученным результатам нужной нам информации, а после выводить результат в удобном виде.
Согласно документации, определим структуру парсера.
В конструкторе класса "class Parser" => "constructor()" - задаем параметры по умолчанию. Здесь определяем:
version — версию нашего парсера;
results — определяем переменные и массивы с возможными результатами, которые будем получать в результате работы парсера. В нашем случае определим:
Все действия происходят в функции «Parse», который представляет собой генератор, и на любую блокирующую операцию должен возвращать yield (это основное и единственное отличие от обычной функции). Особенность метода:
Далее обрабатываем полученный массив результатов:
3. Обязательно заполняем флаг success, чтобы сообщать A-Parser об "успешной" обработки запроса:
После запуска парсера получаем результат:
Полный код парсера можно посмотреть в каталоге.
В данной статье мы рассмотрели пример создания парсера, средствами языка программирования JavaScript. В примере мы увидели как можно получать результаты от готового парсера и манипулируя параметрами, обрабатывать полученные данные. Используя данный набор инструментов можно получать данные с разных стандартных парсеров которые есть в A-Parser. Возможность манипулирования полученными данными и представление результатов в какой угодно форме, показывает всю ширину возможностей которые получает пользователь используя этот функционал.
Как известно, 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']],] - параметры, значение которых можно выбирать через интерфейс и передавать в парсер.
Код:
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']]];
}
- Метод вызывается для каждого запроса поступившего в обработку;
- Передается 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», помещаем количество найденных совпадений. Полный код будет выглядит так:
Код:
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. Возможность манипулирования полученными данными и представление результатов в какой угодно форме, показывает всю ширину возможностей которые получает пользователь используя этот функционал.