Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 25.11.2019, 09:27
Новичок на форуме
Отправить личное сообщение для Vlad_972 Посмотреть профиль Найти все сообщения от Vlad_972
 
Регистрация: 25.11.2019
Сообщений: 7

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, 25.11.2019 в 10:11.
Ответить с цитированием
  #2 (permalink)  
Старый 25.11.2019, 09:33
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,068

Vlad_972,
Пожалуйста, отформатируйте свой код!

Для этого его можно заключить в специальные теги: js/css/html и т.п., например:
[html run]
... минимальный код страницы с вашей проблемой
[/html]

О том, как вставить в сообщение исполняемый javascript и html-код, а также о дополнительных возможностях форматирования - читайте http://javascript.ru/formatting.
Ответить с цитированием
  #3 (permalink)  
Старый 25.11.2019, 15:55
Профессор
Отправить личное сообщение для Audaxviator Посмотреть профиль Найти все сообщения от Audaxviator
 
Регистрация: 28.04.2017
Сообщений: 214

Не понятно, чего вы хотите.
В 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);

Последний раз редактировалось Audaxviator, 25.11.2019 в 16:13.
Ответить с цитированием
  #4 (permalink)  
Старый 25.11.2019, 16:18
Новичок на форуме
Отправить личное сообщение для Vlad_972 Посмотреть профиль Найти все сообщения от Vlad_972
 
Регистрация: 25.11.2019
Сообщений: 7

Благодарю за ответ. Сохранения объекта в Parse требует дописывать обработчик, без него выпадают ошибки. С массивом понятно, а как быть если у меня не одно значение которое надо извлечь? Если у меня там длинный список типа id, name, image.... и тд.
Ответить с цитированием
  #5 (permalink)  
Старый 25.11.2019, 16:38
Профессор
Отправить личное сообщение для Audaxviator Посмотреть профиль Найти все сообщения от Audaxviator
 
Регистрация: 28.04.2017
Сообщений: 214

Я опять не понял про 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']); // здесь
});

Последний раз редактировалось Audaxviator, 25.11.2019 в 17:24.
Ответить с цитированием
  #6 (permalink)  
Старый 25.11.2019, 16:44
Новичок на форуме
Отправить личное сообщение для Vlad_972 Посмотреть профиль Найти все сообщения от Vlad_972
 
Регистрация: 25.11.2019
Сообщений: 7

Сообщение от Audaxviator Посмотреть сообщение
Я опять не понял про 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, subobj) {
  console.log(id, subobj['href']);
});
Большое спасибо. Пойду делать. Спасибо) Хорошего дня.
Ответить с цитированием
  #7 (permalink)  
Старый 25.11.2019, 17:19
Профессор
Отправить личное сообщение для Audaxviator Посмотреть профиль Найти все сообщения от Audaxviator
 
Регистрация: 28.04.2017
Сообщений: 214

Ой. Я там исправил.
Ответить с цитированием
  #8 (permalink)  
Старый 25.11.2019, 17:51
Новичок на форуме
Отправить личное сообщение для Vlad_972 Посмотреть профиль Найти все сообщения от Vlad_972
 
Регистрация: 25.11.2019
Сообщений: 7

Сообщение от Audaxviator Посмотреть сообщение
Ой. Я там исправил.
отлично! Спасибо!
Ответить с цитированием
  #9 (permalink)  
Старый 26.11.2019, 06:48
Новичок на форуме
Отправить личное сообщение для Vlad_972 Посмотреть профиль Найти все сообщения от Vlad_972
 
Регистрация: 25.11.2019
Сообщений: 7

Сообщение от Vlad_972 Посмотреть сообщение
Большое спасибо. Пойду делать. Спасибо) Хорошего дня.
танцы с бубнами... не фига не работает. Дело не в коде. Сохранение в Parse Server не получается так как мне нужно. Нужно чтобы сохранял по строчно, а он гад, либо сохраняет только последний элемент из цикла, либо массив. Пробовал создать простой цикл перебора и запхал туда функцию сохранения, все равно только последний элемент. При этом если из перебора элементы запихивать в массив потом массив целиком сохранить - то сохраняет) но если перебирать массив и сохранять каждый элемент - опять не фига)))
Ответить с цитированием
  #10 (permalink)  
Старый 26.11.2019, 10:25
Новичок на форуме
Отправить личное сообщение для Vlad_972 Посмотреть профиль Найти все сообщения от Vlad_972
 
Регистрация: 25.11.2019
Сообщений: 7

Всем большое спасибо за помощь) Я все же решил задачу)) Хорошего дня!)
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
При нажатии на меню раскрываются все элементы, нужен только 1 steepfox Элементы интерфейса 4 13.06.2015 11:32
Как вернуть div и все вложенные в него элементы в первоначальное состояние? lucky89 Общие вопросы Javascript 17 26.02.2015 18:41
Название ячейки таблицы Questioner Общие вопросы Javascript 6 16.02.2011 09:58
глюк форума Gvozd Сайт Javascript.ru 11 18.03.2009 14:37