Node.js crawler - prośba o pomoc

0

Cześć,
Nie wiem czy dobry wątek, jeżeli nie to przepraszam :)

Zaznaczę od tego, że jestem osobą mega początkującą więc sorry za babole.

Próbuję dla własnych potrzeb napisać crawler, który zbiera interesujące mnie dane z konkretnej strony. Do tego celu korzystam z https://www.npmjs.com/package/crawler. Nie mam problemu z wyciągnięciem danych, ale mam problem z ich późniejszym wykorzystaniem. Chciałbym żeby to działało w ten sposób:

  • pobieram dane z tablicy zawierającej adresy URL
  • dodaję te dane do nowej tablicy
  • wykorzystuje dane z tablicy (np. export do csv i inne rzeczy)
var Crawler = require("crawler");
const urls =  ['jakiś_adres_url', 'kolejny_adres_url', 'jeszcze_inny_adres_url'];
let array = [];

var c = new Crawler({
    maxConnections : 10,
    // This will be called for each crawled page
    callback : function (error, res, done) {
        if(error){
            console.log(error);
        }else{
            var $ = res.$;
            let img = $('img#bigpic').attr('src');
            const href = res.request.uri.href
            let check = "";
            if (img == "jakiś_url_obrazka") {
              check = "brak zdjęcia";
            } else if (!img){
              check = "nie produkt";
              img = "nie produkt";
            } else {
              check = "jest zdjęcie";
            }
            array.push({
              Url: href,
              Zdjecie: img,
              Czy_jest_zdjecie: check,
            })
        }
        done();
    }
});
c.queue(urls);
// I do tej części wszystko mi działa, ale teraz chciałbym tą tablicę wykorzystać. Jeżeli ją wyświetlę w konsoli to pokazuje się pusta tablica.

Jak mogę wykorzystać stworzoną tablicę array? Z tego co rozumiem to ten crawler działa asynchronicznie(?), dlatego wyświetlając tablicę w konsoli wyświetla mi się pusta tablica i dopiero potem crawler kończy swoją robotę. Czytałem o różnych rozwiązaniach (callback, promises itp.), ale nie potrafię tego ogarnąć. Będę wdzięczny za pomoc :)

2

Może coś takiego?

crawler.on('drain',function(){
    console.log(array);
});

Zgodnie z docs:

Event: 'drain'
Emitted when queue is empty.

0
Markuz napisał(a):

Może coś takiego?

crawler.on('drain',function(){
    console.log(array);
});

Zgodnie z docs:

Event: 'drain'
Emitted when queue is empty.

Super, dzięki! <3

1 użytkowników online, w tym zalogowanych: 0, gości: 1