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']); // здесь }); |
Цитата:
|
Ой. Я там исправил.
|
Цитата:
|
Цитата:
|
Всем большое спасибо за помощь) Я все же решил задачу)) Хорошего дня!)
|
Цитата:
|
))) троллите) мне стыдно, там простая ошибка - не там инициировал объект базы данных)))
|
Это будет внезапный офф-топ.
Знаете ли вы, что все высокоуровневые языки программирования хотят быть похожими на JavaScript? -- Но не у всех это получается. Вот к примеру, новейший язык Go (являющийся, кстати, ровесником платформы Node.js) - у него почти получилось. Допустим, я написал выше такую конструкцию на JS: var obj = {}; $('.catalog-products-list div').each((i, el) => { var ob = { href: $(el).attr('href') }; obj[$(el).attr('id')] = ob; }); А как она же могла бы выглядеть на Go (с некоторыми "но", конечно, но вы понели)? Примерно так: obj := make(map[string]map[string]string) $('.catalog-products-list div').each((i, el) => { ob := map[string]string{ "href": $(el).attr('href') } obj[$(el).attr('id')] = ob }); Как видим, преимущество "динамически-типизированных языков" (таких как ничтожный JavaScript или великий Lisp) над "статически-типизированными" заключается в том, что в первых надо меньше писать букав. Преимуществ же вторых над первыми - я вообще не знаю. |
dart ближе к js чем go )
|
Я однажды искал какой-нибудь понятный пример по одному не совсем простому вопросу в связи с MongoDB - и нашёл. Читаю пример, такой весь довольный... но в какой-то момент вдруг начинаю осознавать, что "здесь что-то не так".
Ба! Да это ж пример на другом языке! Пример был на Python - но я не сразу заметил. |
Часовой пояс GMT +3, время: 06:05. |