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, время: 18:13. |