Browse By

Web scraping with Cheerio in NodeJs

Πριν λιγες ημερες χρειαστηκε να αποθηκευσω δεδομενα μιας ιστοσελιδας τα οποια ανανεωνονταν αρκετες φορες καθημερινα. Για το λογο αυτο, καθοτι αδυνατο αυτη η δουλεια να γινει manual εφτιαξα ενα μικρο app σε NodeJS το οποιο χρησιμοποιει τα module, Request και Cheerio. Το μεν πρωτο ειναι υπευθυνο για να καλει την σελιδα και μεσω του δευτερου(Cheerio) μπορουμε να επιλεξουμε ποια δεδομενα θα γινουν extract. Το Cheerio ειναι ενα εκπληκτικο module το οποιο θα σας λυσει τα χερια με την ευκολια του αφου η χρηση του μοιαζει υπερβολικα με την jQuery. Αναλυτικα μπορειτε να διαβασετε στο repository του στο Github.

Το παρακατω κομματι demo κωδικα, αυτο που κανει αρχικα ειναι να καλει τα δυο module που ανεφερα, να περναει μια url του Google news στο request module και μεσω του Cheerio να κανει extract οποιο tag εχει την css class .titletext και τελος να παιρνει το text αλλα και το url του. Επειτα εγω το δειχνω στην κοσνολα αλλα καλλιστα αυτα τα αποτελεσματα μπορουν να αποθηκευθουν σε μια βαση δεδομενων για περαιτερω αξιοποιηση. Κατι αναλογο θα μπορουσε να χρησιμοποιηθει πχ για τιμες αεροπορικων εισιτηριων ή τιμες μετοχων κλπ.

var request = require("request");
var cheerio = require("cheerio");
request({
  uri: "http://news.google.com/news/section?pz=1&cf=all&ned=en_ie&topic=tc&siidp=4c2999aafd12587d6e3c59ef4f67417b1e47&ict=ln",
}, function(error, response, body) {
  var $ = cheerio.load(body);
  $(".titletext").each(function() {
    var link = $(this);
    var text = link.text();
    var href = link.closest("a").attr("href");
    console.log(text + " -> " + href);
  });
});

cheerio_nodeJS

Leave a Reply

Your email address will not be published. Required fields are marked *