Всем привет. Подскажите как сделать следующее. Имеем первый парсер net:http Собирает с донора название статьи, и сохраняет в p1.name с последующим сохранением в txt. Так же в задание есть второй парсер ютуб в этом же задание. По логике первый парсер парсит название, второй парсит ссылку на ютуб. Делаю запрос вот так https://image.prntscr.com/image/zjU3aUK0SBanAXrUQPIClQ.png Настройки самого парсера https://image.prntscr.com/image/gxe333tqSJ6SJw52PRsgCQ.png Но запрос получается пустым. https://image.prntscr.com/image/BxiLZLqFSDyVEeqKDzkSFw.png Хотя если прописать в ручную то запрос делается. https://image.prntscr.com/image/GgnOMtxRRaOSZJvE8wNVIw.png https://image.prntscr.com/image/fTwnExdKStq17eZ8ANtKUA.png Понимаю что не передается $p1.name Скажите что не правильно делаю? В конечном итоге нужно сохранить в txt название статьи;ссылка на ролик
Здравствуйте. Передача данных между парсерами в рамках одного задания в обычном пресете невозможна. Используете JS-парсеры, там можно реализовать такую логику.
Здравствуйте, Спасибо за ответ. Если не трудно, не покажите пример логики JS-парсера? У меня есть но под гугл, но что то не совсем там понятно. Если взять за пример простейший пресет. https://image.prntscr.com/image/FG5ugDZsQ-GOtZ4ul-5QTQ.png Как сделать запрос в ютуб и вывести (только первый $serp.1.link) в результат $p1.title;ссылка на ролик Буду очень признателен)
https://a-parser.com/resources/27/ https://a-parser.com/resources/134/ https://a-parser.com/resources/211/ Вот несколько примеров JS парсеров, где сначала получаются данные одним парсером, а потом они используются во втором.
Спасибо. Жалко что после приведенных примеров стало еще запутаннее... Все из за алгоритма работы. Мне нужен как описан выше, но в примерах там по несколько парсер что усложняет задачу. По крайне мере для меня.
По вашей задачи все предельно просто: используя yield this.request получаете name используя yield this.parser.request, обращаетесь к SE::Youtube, передавая в качестве запроса полученный name записываете в переменные полученные данные Весь функционал описан в Документации: https://a-parser.com/wiki/js-parsers/ Если у вас нет возможности изучать документацию и писать парсеры самостоятельно, то вы можете обратиться в платную поддержку за написанием: http://a-parser.com/threads/1795/
Конечно просто. Обратится то за платным решением это конечно выход я не спорю, со штудированием вики тоже не поспоришь, но мой вопрос но это настолько "будничная задача" и как Вы сами сказали простейшая задача, что делается в две строки. Взять запрос и вывести результат. Это не сверхестественый парсер. Чтож видимо с каждым подобным вопросом нужно стучатся в платную помощь. Спасибо.
Запрос делает, но не выводит результат $p1.preset https://image.prntscr.com/image/ts3CDDRETGuGiv1JywFyVw.png Что не так то? Спойлер: JS код Код: class Parser { constructor() { this.defaultConf = { version: '0.1.18', results: { flat: [ ['key', 'Keyword'], ] }, results_format: "$link", search_engine: 'SE::YouTube', }; this.editableConf = [ ['SE_YouTube_preset', ['combobox', 'SE::YouTube preset']], ]; } *parse(set, results) { return yield* set.lvl == 0 ? this.parseSE(set, results) : this.parseTitle(set, results); } *parseSE(set, results) { this.logger.put("Start scraping query: " + set.query); this.logger.put(`Use ${this.conf.search_engine}`); let SEresp = yield this.parser.request( this.conf.search_engine, this.conf[this.conf.search_engine.replace(/::/, '_') + '_preset'], set.query ); if(SEresp.info.success) { let link_count = 0; let step = this.conf.search_engine == 'SE::YouTube' ? 3 : 6; return results; } else { this.logger.put(`Error scraping ${this.conf.search_engine}`); results.success = 0; return results; } } }
К сожалению, мы не можем на каждый вопрос делать и выкладывать готовые решения, у нас попросту на это не хватит времени и ресурсов. Вы выводите в результат несуществующую переменную.
Вы в link ничего не записываете. Да и логика парсера не соответствует вашей задаче. Я выше описывал примерный алгоритм работы, а судя по вашему коду, у вас совсем другое.
Задача подстановки значения из результатов одного парсера в запросы другого парсера в пределах одного задания до сих пор решается только через JS парсер?