Parse. Cheerio. Подскажите. Не могу сохранить все элементы. Только последний.
Все привет. Парни, я тут новенький и в целом это не мой профиль. Подскажите где я что-то делаю не так?
Есть функция чтобы сграбить с web данные. Использую cheerio. Хочу сохранить все в Parse. Но сохраняется только один последний элемент. Видимо он перезаписывается постоянно. async function first() { try { request('SOME_WEB_HTTPS_PAGE', (error, response, html) => { $createNewName = new NameObj(); if(!error && response.statusCode == 200) { const $ = cheerio.load(html); $('.catalog-products-list div').each((i, el) => { async function asyncParallel() { const elem = $(el); try { let [val1] = await Promise.all([get1(elem)]); if(`${val1}` != `undefined`) { let correct = await Promise.all([saveData(`${val1}`)]); } } catch(err) { console.log(err) } } asyncParallel(); }); }; function saveData(name) { newData.set("name", name) newData.save() .then(function() { console.log("all saved"); }, function(error) { console.log(error); }); } function get1(elem) { const newName = elem.attr('name'); if(newName != undefined) { return newName } } }); } catch(err) { console.log(err); } }; Буду благодарен за подсказку. Спасибо. |
Vlad_972,
Пожалуйста, отформатируйте свой код! Для этого его можно заключить в специальные теги: js/css/html и т.п., например: [html run] ... минимальный код страницы с вашей проблемой [/html] О том, как вставить в сообщение исполняемый javascript и html-код, а также о дополнительных возможностях форматирования - читайте http://javascript.ru/formatting. |
Не понятно, чего вы хотите.
В cherio нет никакой асинхронности. Вот в этой строчке $('.catalog-products-list div').each((i, el) =>она начинает перебирать все элементы, которые уже не строки, это уже объекты. И пока этот цикл не закончит работать, дальше ничего делаться не будет. Просто объявите пустой массив перед циклом, добавляйте методом push в этот массив в цикле всё, что вы из них хотите, цикл закончит работу - и после него вы получите готовый массив. Ну... вот так в массиве будут значения всех атрибутов href из дивов внутри элементов с классом .catalog-products-list var arr = []; $('.catalog-products-list div').each((i, el) => { arr.push($(el).attr('href')); }) console.log(arr); |
Благодарю за ответ. Сохранения объекта в Parse требует дописывать обработчик, без него выпадают ошибки. С массивом понятно, а как быть если у меня не одно значение которое надо извлечь? Если у меня там длинный список типа id, name, image.... и тд.
|
Я опять не понял про Parse. Но не важно.
Это всё обычный javascript без закидонов. Делайте что хотите. Вот так - на выходе получится объект (ну типа map) с ключами в виде айдишников и значениями в виде подобъектов с атрибутами href под ключами 'href' var obj = {}; $('.catalog-products-list div').each((i, el) => { var ob = {}; ob['href'] = $(el).attr('href'); obj[$(el).attr('id')] = ob; }); И дальше можно перебрать этот готовый объект, разглядывая айдишники и соответствующие им хрефы. Object.keys(obj).forEach(function(id) { console.log(id, obj[id]['href']); // здесь }); |
Цитата:
|
Ой. Я там исправил.
|
Цитата:
|
Цитата:
|
Всем большое спасибо за помощь) Я все же решил задачу)) Хорошего дня!)
|
Часовой пояс GMT +3, время: 07:02. |