9 Library Nodejs untuk Web Scraping

Muhammad Arslan 27 September 2017

9 Library Nodejs untuk Web Scraping

Masih membahas tentang web scraping, Node.js pun memiliki sejumlah library yang dikhususkan untuk pekerjaan ini. Selain tersedia banyak, Node.js sendiri pun memiliki kelebihan sebagai bahasa pemrograman yang sudah default asinkron. Dimana sebuah bagian blok kode dapat dijalankan tanpa harus menunggu bagian blok kode diatasnya bila kode yang diatas tidak memiliki hubungan sama sekali.

Misal kejadian ini dapat kita temukan ketika ingin melakukan scraping dari 5 website. Untuk mendapatkan informasi dari website kelimat, kita tidak perlu menunggu empat website sebelumnya selesai, masing - masing dijalankan secara asinkron sehingga yang cepat eksekusinya akan beres terlebih dahulu. Dan yang paling lama eksekusinya akan selesai belakangan.

Daripada membuat library sendiri, berikut ini adalah library yang dapat kamu gunakan untuk web scraping dengan menggunakan Node.js

###1. Scraper.js

Scraper.js adalah library untuk melakukan web scraping dengan mudah. Library ini memiliki dua scraper yaitu statik dan dinamik.

Perbedannya adalah terletak pada jenis konten yang di-parsing. Pada dinamik, scraper akan bekerja keras mencari elemen yang selalu berubah.

Contoh:

// static scraper
var scraperjs = require('scraperjs');
scraperjs.StaticScraper.create('https://news.ycombinator.com/')
	.scrape(function($) {
		return $(".title a").map(function() {
			return $(this).text();
		}).get();
	})
	.then(function(news) {
		console.log(news);
	})
	
// dynamic scraper
var scraperjs = require('scraperjs');
scraperjs.DynamicScraper.create('https://news.ycombinator.com/')
	.scrape(function($) {
		return $(".title a").map(function() {
			return $(this).text();
		}).get();
	})
	.then(function(news) {
		console.log(news);
	})

Info lebih lanjut silahkan kunjungi tautan berikut: https://github.com/ruipgil/scraperjs

###2. Casper.js

Casper.js adalah sebuah web scraping tool yang dikembangkan diatas Phantom.js, kamu dapat melakukan banyak hal dengan Casper.js seperti mensimulasikan cara kerja browser seperti klik dan enter pada sebuah form, kemudian menangani redirect dan melakukan refresh. Serta mendeteksi berbagai event Javascript.

Casper.js juga dapat menggunakan source Javascript lainnya sebagai alat bantu dengan penggunaan lebih mudah daripada Phantom.js. Selain itu Casper.js juga menggunakan skema parsing HTML yang lebih mudah dengan XPath dan Selector seperti jQuery.

Contoh:

var casper = require('casper').create();

casper.start('http://casperjs.org/', function() {
    this.echo(this.getTitle());
});

casper.thenOpen('http://phantomjs.org', function() {
    this.echo(this.getTitle());
});

casper.run();

Info lebih lanjut silahkan kunjungi tautan berikut: http://docs.casperjs.org/en/latest/quickstart.html

###3. iNeed

iNeed merupakan salah satu web scraping library yang paling simple. Dia tidak membantu kamu untuk mengambil suatu bagian dari halaman web tapi mengambil konten statik seperti gambar, file CSS, atau Javascript dari halaman tersebut.

Contoh:

var ineed = require('ineed');

ineed.collect.images.hyperlinks.from('http://site-you-want-to-scrape.com',  
  function (err, response, result) {
     console.log(result);
  });

Info lebih lanjut silahkan kunjungi tautan berikut: https://github.com/inikulin/ineed

###4. X-Ray

Library yang ini juga merupakan salah satu library yang cukup mudah digunakan. Saking simplenya, kamu tidak akan pusing dibuatnya.

Contoh:

var Xray = require('x-ray');  
var x = Xray();

x('https://site-you-want-to-scrape.com', '.articles', [{  
  title: '.article-title',
  image: '.article-image@src',
}])(function(err, result){
    console.log(result)
});

Info lebih lanjut silahkan kunjungi tautan berikut: https://github.com/lapwinglabs/x-ray

###5. Scrape-It

Library yang satu ini memiliki moto sebagai web scraping library for human

Contoh:

scrapeIt("http://ionicabizau.net", {
    title: ".header h1"
  , desc: ".header h2"
  , avatar: {
        selector: ".header img"
      , attr: "src"
    }
}).then(page => {
    console.log(page);
});


Info lebih lanjut silahkan kunjungi tautan berikut: https://github.com/IonicaBizau/scrape-it

###6. Yakuza

Dibandingkan yang lain, Yakuza merupakan web scraper library yang mengajak penggunanya untuk menyusuk kode scraping dengan berbasis projek. Jadi di dalamnya terdapat kode untuk menangani scraper dan sub-task yang dibutuhkan. Cocok untuk membuat web scraping berskala besar.

Contoh:

var Yakuza = require('yakuza');  
var cheerio = require('cheerio');

// define the main-scraper
Yakuza.scraper('siteName');

// define agents with their tasks
Yakuza.agent('siteName', 'articleFetcher')  
  .plan(['getArticles'])  
  .routine('getArticles', ['getArticles']);

// define tasks
Yakuza  
  .task('siteName', 'articleFetcher', 'getArticles')
  .main(function (task, http, params) {
    http.get('http://www.site-you-want-to-scrape.com', function (err, res, body) {
      if (err) {
        return task.fail(err, 'Request returned an error');
      }

      var $ = cheerio.load(body),
        articles = [];

      $('p.article').each(function (i, article) {
        articles.push($(article).text());
      });

      task.success(articles);
    });
  })
  .hooks({
    onSuccess: function(task){
      console.log(task.data) // prints the found articles
    }
  });

// create a new job and start it
var job = Yakuza.job('siteName', 'articleFetcher')  
job.routine('getArticles')  
job.run();

Info lebih lanjut silahkan kunjungi tautan berikut: https://github.com/Narzerus/yakuza

###7. Osmosis

Web scraping library ini dibangun diatas libxml dengan binding ke versi bahasa C. Selain itu kodenya terbilang lightweight karena tidak membutuhkan dependensi apapun.

Sistemnya pun mendukung selektor seperti CSS ataupun XPath. Di dalamnya selain terdapat web scraper, terdapat juga HTML/XML parser.

Contoh:

var osmosis = require('osmosis');

osmosis.get('http://site-you-wanna-scrape.com') // url of the site you want to scrape  
  .find('p.article') // selector
  .set('article') // name of the key in the results
  .data(function(results) { //output
    console.log(results);
  });

Info lebih lanjut silahkan kunjungi tautan berikut: https://github.com/rchipka/node-osmosis

###8.CheerIO

Sebuah library untuk web scraping namun dibangun diatas kode inti jQuery. Sehingga ketika menggunakannya akan serasa menggunakan jQuery namun di belakang layar.

Pada dasarnya CheerIO melepas semua API yang berhubungan dengan bagian frontend, sehingga kode core untuk parsing HTML-nya tetap digunakan.

Contoh:

const cheerio = require('cheerio')
const $ = cheerio.load('<h2 class="title">Hello world</h2>')

$('h2.title').text('Hello there!')
$('h2').addClass('welcome')

$.html()
//=> <h2 class="title welcome">Hello there!</h2>

Info lebih lanjut silahkan kunjungi tautan berikut: https://github.com/cheeriojs/cheerio

###9. Noodle

Berbeda dengan yang lainnya, selain menjadikannya sebagai library. Noodle pun dapat digunakan menjadi sebuah web service, jadi kamu dapat melakukan web scraping via RESTful API tanpa harus menyertakan kode Noodle di aplikasi web kamu.

Contoh:

// server mode

{
  "url": "http://site-you-wanna-scrape.com",
  "type": "html",
  "selector": "p.article",
  "extract": "text"
}

// library mode
var noodle = require('noodlejs');

noodle.query({  
  url: 'http://site-you-wanna-scrape.com',
  type: 'html',
  selector: 'p.article',
  extract: 'text'
})
.then(function (results) {
  console.log(results);
});

Info lebih lanjut silahkan kunjungi tautan berikut: http://noodlejs.com/