Добрый день. Есть сайт с продуктами, который я пытаюсь спарсить с помощью 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/, потому как документации по этому поводу не нашел. Там используется что-то типа такого: Спойлер: 1 Код: 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; } } Формат результата это и есть по сути функция. Можно также использовать tools.js, либо форматировать результат прямо в JS парсере и выводить его одной переменной.