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

autoparts.db

A-Parser Pro License
A-Parser Pro
Добрый день.
Есть сайт с продуктами, который я пытаюсь спарсить с помощью 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'],
]

в один проход парсера?
 
Я посмотрел вот этот пример - 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, ну т.е. чтобы вместо формата вызывалась моя каллбек функцией, которая будет форматировать результат?
 
Последнее редактирование:
Добрый день.
Не совсем понятен вопрос...

Выполняйте внутри *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;
    }
}

ПС можно ли как-то обойти this.defaultConf.results_format, ну т.е. чтобы вместо формата вызывалась моя каллбек функцией, которая будет форматировать результат?
Формат результата это и есть по сути функция. Можно также использовать tools.js, либо форматировать результат прямо в JS парсере и выводить его одной переменной.
 
Последнее редактирование:
Назад
Верх