1. Вступайте в наш Telegram чат: https://t.me/a_parser Нас уже 2600+ и мы растем!
    Скрыть объявление

Массив результатов в Javascript

Тема в разделе "Техническая поддержка", создана пользователем autoparts.db, 12 май 2019.

  1. autoparts.db

    autoparts.db A-Parser Pro License
    A-Parser Pro

    Регистрация:
    17 мар 2018
    Сообщения:
    37
    Симпатии:
    12
    Добрый день.
    Есть сайт с продуктами, который я пытаюсь спарсить с помощью Javascript парсера, сейчас результат вот такой:
    Код:
    flat: [
           ['brand', 'Product Brand'],
           ['sku', 'Product SKU'],
           ['price', 'Product Price'],
           ['name', 'Product Name'],
           ['desc', 'Product Descriptions'],
    ]
    
    Но на странице с продуктом есть поле с дополнительными параметрами, и когда я из изменяю она с помощью AJAX подгружает новый price и префикс к имени продукта.

    Так что вопрос такой - как мне вернуть массив из вот этого:

    Код:
    flat: [
           ['brand', 'Product Brand'],
           ['sku', 'Product SKU'],
           ['price', 'Product Price'],
           ['name', 'Product Name'],
           ['desc', 'Product Descriptions'],
    ]
    
    в один проход парсера?
     
  2. autoparts.db

    autoparts.db A-Parser Pro License
    A-Parser Pro

    Регистрация:
    17 мар 2018
    Сообщения:
    37
    Симпатии:
    12
    Я посмотрел вот этот пример - https://a-parser.com/resources/333/, потому как документации по этому поводу не нашел.

    Там используется что-то типа такого:

    Код:
               
    results: {
                    flat: [
                        ['volume', 'Number of monthly searches'],
                        ['cpc', 'Cost per click'],
                        ['cost', 'Maximum estimated traffic cost'],
                        ['kei', 'Keyword effectiveness index'],
                    ],
                    arrays: {
                        similar: ['Similar keywords list', [
                            ['keyword', 'Keyword'],
                            ['volume', 'Search volume'],
                            ['cpc', 'Cost per click'],
                            ['kei', 'Keyword effectiveness index'],
                            ['sites', 'Sites in SERPs'],
                            ['cost', 'Maximum estimated traffic cost']
                        ]],
                        related: ['Related keywords list', [
                            ['keyword', 'Keyword'],
                            ['relevance', 'Relevance'],
                            ['volume', 'Search volume'],
                            ['cpc', 'Cost per click'],
                            ['kei', 'Keyword effectiveness index'],
                            ['sites', 'Sites in SERPs'],
                            ['cost', 'Maximum estimated traffic cost']
                        ]],
                        long: ['Long-tail keywords list', [
                            ['keyword', 'Keyword'],
                            ['volume', 'Search volume'],
                            ['cpc', 'Cost per click'],
                            ['kei', 'Keyword effectiveness index'],
                            ['sites', 'Sites in SERPs'],
                            ['cost', 'Maximum estimated traffic cost']
                        ]]
                    }
                },
    

    Но что-то я не пойму логики работы, возможно ли за один вызов *parse(set, results) вернуть множество результатов в results.arrays?

    ПС можно ли как-то обойти this.defaultConf.results_format, ну т.е. чтобы вместо формата вызывалась моя каллбек функцией, которая будет форматировать результат?
     
    #2 autoparts.db, 12 май 2019
    Последнее редактирование: 12 май 2019
  3. Support

    Support Administrator
    Команда форума A-Parser Enterprise

    Регистрация:
    16 мар 2012
    Сообщения:
    4.546
    Симпатии:
    2.163
    Добрый день.
    Не совсем понятен вопрос...

    Выполняйте внутри *parse(set, results) все необходимые запросы (в цикле или последовательно - зависит от необходимой вам логики) и заполняйте массив результатов, который должен быть объявлен в объекте arrays объекта this.defaultConf.
    В примере, о котором вы писали выше делается последовательно несколько запросов и заполняются необходимые массивы результатов.
    Код:
    class Parser {
        constructor() {
            this.defaultConf = {
                results: {
                    arrays: {
                        serp: ['Results list', [
                            ['value1', 'Value 2'],
                            ['value2', 'Value 2']
                        ]],
                        keys: ['Keywords list', [
                            ['key', 'Keyword']
                        ]]
                    }
                },
                results_format: "$serp.format('$value1, $value2\\n')$keys.format('$key\\n')",
                ...
            }
        }
    
        *parse(set, results) {
            let response1 = yield this.request('GET', link1, {}, {});
            ...
            for(let item of response1) {
                results.serp.push(item[1], item[2]);
            }
                
            let response2 = yield this.request('GET', link2, {}, {});
            ...
            for(let item of response2) {
                results.keys.push(item);
            }
            
            results.success = 1;
            return results;
        }
    }

    Формат результата это и есть по сути функция. Можно также использовать tools.js, либо форматировать результат прямо в JS парсере и выводить его одной переменной.
     
    #3 Support, 13 май 2019
    Последнее редактирование: 13 май 2019
    autoparts.db нравится это.
  4. autoparts.db

    autoparts.db A-Parser Pro License
    A-Parser Pro

    Регистрация:
    17 мар 2018
    Сообщения:
    37
    Симпатии:
    12
    Да, спасибо, я уже разобрался и сделал именно так:

     
    Support нравится это.

Поделиться этой страницей