Scraping Web dengan Nodejs
Cheerio vs X-Ray
Pengenalan
Scraping adalah teknik mengambil atau mengekstrak sebuah data dari suatu websites secara spesifik, spesifik disini maksudnya adalah ketika kita hanya ingin mengambil data atau informasi tertentu dari suatu websites contoh dari websites imdb berikut ini saya hanya menginginkan data pada tab MOST POPULAR.
Scraping digunakan biasanya jika websites yang ingin kita ambil data nya, tidak menyediakan API ataupun RSS atau bisa juga data yang dibutuhkan tidak tersedia pada API.
Oh iya kita juga harus memperhatikan kode etik dalam melakukan scraping ya.
Web Crawling ?
Kata-kata Web Crawling dan Web Scraping sudah sering kita dengar dan mungkin terlihat serupa oleh beberapa orang tapi sebenarnya ada perbedaan antara crawling dan scraping meskipun memang saling terkait.
Contoh yang paling umum dari crawling adalah penggunaan search engine. Google misalnya, google akan melakukan perayapan dengan robot nya yang dikenal dengan nama google spider setelah itu google akan melakukan crawling ke seluruh dokumen websites-websites tersebut untuk mendapatkan informasi yang nantinya akan disimpan ke database. Tujuan utamanya adalah mengumpulkan data, sehingga ketika pengguna mengetikkan kata pada search engine maka search engine dapat dengan segera menampilkan websites yang relevan.
Secara singkat Web Crawling adalah proses mengunjungi situs web, membaca halaman web dan menemukan informasi dari suatu web, mengindeks semua kata dalam sebuah dokumen, dan menambahkan nya ke database.
X-Ray
X-Ray merupakan package yang terdapat di nodejs yang berguna untuk membantu kita dalam melakukan scraping. Langsung saja kita akan mencoba scraping web imdb untuk menampilkan new movie coming soon pada link berikut
Membuat Project
Pertama, kita mulai dengan membuat project node js dengan menggunakan npm init.
npm init
Ikuti perintah, jika berhasil maka akan terbentuk file package.json. Selanjutnya kita akan menginstal beberapa package yang dibutuhkan.
npm install express x-ray --save
Buat file bernama server.js dan file express bernama app.js lalu isikan kode berikut pada server.js.
var http = require('http');var server = http.createServer(app); server.listen(port, function() { console.log('Server listening on port '+ server.address().port);});exports = module.exports = app;
dan isikan script berikut pada app.js
var express = require('express');var app = express();module.exports = app;
Extract
Sebelum kita mengekstrak data yang kita butuhkan, kita harus menganalisis struktur html terlebih dahulu. Dengan melakukan inspect element pada browser kita bisa mengetahui tag, class, id mana yang berisi data yang kita butuhkan.
Setelah mengetahui tag, class, atau id mana yang berisi data yang kita butuhkan, selanjutnya kita akan mengekstrak data tersebut.
Berikut merupakan code untuk mengekstrak data title, description, director, director_descrition, dan link.
app.js
simple bukan ?
Penjelasan :
- Jalankan server dan ketik url /new-movie-soon maka akan muncul data dalam format json.
- tbody … merupakan tag html yang berisi data yang kita butuhkan.
- Pada baris 11 kita melakukan request lagi untuk mengambil description director. “tbody .txt-block a@href” menghasilkan link detail director. Kita mengambil data description director dengan menggunakan tag “tbody #name-bio-text”.
- X-ray akan otomatis menghasilkan data dalam format json.
Postingan selanjutnya masih tentang scraping namun dengan bantuan package yang berbeda yaitu cheerio. see ya :)