Два парсера и запросы

  • Автор темы Автор темы Zlodeys
  • Дата начала Дата начала

Zlodeys

A-Parser Pro License
A-Parser Pro
Всем привет.
Подскажите как сделать следующее.

Имеем первый парсер 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;ссылка на ролик
Буду очень признателен)
 
Спасибо. Жалко что после приведенных примеров стало еще запутаннее... Все из за алгоритма работы. Мне нужен как описан выше, но в примерах там по несколько парсер что усложняет задачу. По крайне мере для меня.
 
По вашей задачи все предельно просто:
  • используя yield this.request получаете name
  • используя yield this.parser.request, обращаетесь к SE::Youtube, передавая в качестве запроса полученный name
  • записываете в переменные полученные данные
Весь функционал описан в Документации: https://a-parser.com/wiki/js-parsers/
Если у вас нет возможности изучать документацию и писать парсеры самостоятельно, то вы можете обратиться в платную поддержку за написанием: http://a-parser.com/threads/1795/
 
По вашей задачи все предельно просто:
Конечно просто.
282444.jpg


Обратится то за платным решением это конечно выход я не спорю, со штудированием вики тоже не поспоришь, но мой вопрос но это настолько "будничная задача" и как Вы сами сказали простейшая задача, что делается в две строки. Взять запрос и вывести результат. Это не сверхестественый парсер. Чтож видимо с каждым подобным вопросом нужно стучатся в платную помощь. Спасибо.
 
Последнее редактирование:
Запрос делает, но не выводит результат $p1.preset
https://image.prntscr.com/image/ts3CDDRETGuGiv1JywFyVw.png
Что не так то?
Код:
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, выводится в $link выводится в результате none

Код:
class Parser {
    constructor() {
        this.defaultConf = {
            version: '0.1.24',
            results: {
                 flat: [
                    ['link', 'Link'],
                ]
            },
            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 парсер?
 
Назад
Верх