Skip to content Skip to sidebar Skip to footer

Cara Scrape Website Menggunakan Cheerio dan Node-fetch

Scraping Web with Node.js Cheerio

Scraping Website adalah mengcopy atau mengekstrasi data dari suatu website. Pada artikel kali ini kita akan membahas tentang bagaimana scrape sebuah website dengan metode parse/parsing HTML menggunakan package dari Node.js, cheerio dan node-fetch.

Apa yang membuat Cheerio istimewa adalah betapa mudah dan ringannya menggunakan di server kalian, tetapi itu bukan headless chrome browser seperti Puppeteer sehingga Anda tidak akan melakukan apa pun yang membutuhkan interaksi pengguna seperti logging in.


const cheerio = require('cheerio');

const soup = cheerio.load('<div id="kocakz">Hai saya aruga</div><a href="https://www.arugaz.my.id">ArugaZ Blog</a>')
console.log(soup('#kocakz').text() + '\n\n' + soup('a').attr('href'))
/*
Output terminal :
Hai saya aruga

https://www.arugaz.my.id
*/

Untuk memulai dengan Cheerio, kalian perlu tahu cara menjalankan server node. Kalian juga memerlukan node-fetch yang dapat kalian temukan menggunakan npm. Node-fetch ini digunakan untuk menparse halaman website.

Pastikan diperangkat kalian sudah terinstall Node.js dan npm, jika belum bisa baca pada artikel berikut ini.

Proses Scraping Wesbite

1. Membuat Folder / Dir

Pertama, kita akan membuat sebuah folder baru untuk memudahkan kita dalam membuat code-code dalam tahap scrape web ini. Pada "terminal" silahkan ketik.

mkdir nama-folder

Setelah membuat folder, lalu ketik lagi.

cd nama-folder

2. Membuat File package.json

Sebelum menginstall package kalian harus membuat file package.json, untuk membuatnya cukup dengan jalankan perintah.

npm init -y

Setelah menjalankan perintah diatas, maka akan otomatis membuat sebuah file package.json, yang berisikan sebagai berikut.

{
  "name": "nama-folder",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "keywords": [],
  "author": "",
  "license": "ISC"
}

Pada file package.json, kita perlu mendeskripsikan nama aplikasi kita (name), version (versi), description (deskripsi), main atau entry point dari aplikasi kita. Terdapat juga scripts yang dapat digunakan untuk menjalankan task yang sifatnya berulang. Selain itu ada author, license, dependencies dan devDependencies. Perlu kamu ingat bahwa pada NodeJS, file package.json sangat penting karena file tersebut yang mendeskripsikan gambaran aplikasi kamu, siapa penulisnya, serta library apa saja yang digunakan oleh aplikasi tersebut.

3. Penginstallan Package

Selanjutnya kita perlu menginstall package dari Cheerio dan node-fetch, ya iya lah wkwk. Untuk menginstallnya cukup ketik perintah,

npm install cheerio node-fetch --save

Setelah selesai menginstall, akan muncul folder baru dengan nama node_modules. Folder tersebut berisi library yang kita install. Selain itu, library yang kita install pun tercatat pada file package.json. Sehingga ketika kamu ingin mengirimkan aplikasi NodeJS kamu kepada temen atau orang lain, kamu cukup memberikan kode dan file package.json kamu. Orang yang menerima kode dan file package.json cukup ketik kode npm install pada Terminal atau Command Prompt untuk menginstall library yang digunakan oleh aplikasi yang kamu buat.

4. Proses Coding

Dalam contoh ini saya akan mencoba scrape website komiku.id biar langsung paham. Buatlah file baru dengan nama "index.js", lalu ketikan code berikut untuk memanggil package dari Cheerio dan Node-fetch.

const cheerio = require('cheerio');
const fetch = require('node-fetch');

Selanjutnya, membuat sebuah function baru untuk mengintegrasikan kode kita agar mudah untuk dipanggil.

function komiku(QUERY) {
	return new Promise((resolve, reject) => {
		
	})
}

Pada kode diatas saya menggunakan Javascript Promise untuk membalikan kodenya saat dipanggil nanti, selanjutnya menparse URI menggunakan node-fetch.

function komiku(QUERY) {
	return new Promise((resolve, reject) => {
		fetch('https://komiku.id/cari/?post_type=manga&s='+ encodeURIComponent(QUERY) , {
			method: 'get'
		})
		.then(res => res.text())
		.then(res => {
			resolve(res)
		})
		.catch(reject)
	})
}

Apabila function diatas dijalankan, maka akan terlihat kode HTML dari URI yang diparse. Lalu kita panggil package cheerio untuk menload kode HTML yang telah diparse oleh node-fetch. Saya akan berikan contoh untuk mendapatkan judul dan thumbnail dari komik yang kalian cari.

function komiku(QUERY) {
	return new Promise((resolve, reject) => {
		fetch('https://komiku.id/cari/?post_type=manga&s='+ encodeURIComponent(QUERY) , {
			method: 'get'
		})
		.then(res => res.text())
		.then(res => {
			const soup = cheerio.load(res)
			const IndTitle = [];
			const thumb = [];
			const hasil = [];
			soup('div.daftar').each(function(a, b) {
				soup(b).find('span.judul2').each(function(c, d) {
					IndTitle.push(soup(d).text())
				})
				soup('div.bgei').each(function(c, d) {
					soup(d).find('a').each(function(e, f) {
						soup(f).find('img').each(function(g, h) {
							thumb.push(soup(h).attr('data-src'))
						})
					})
				})
			})
			for (let i = 0; i < IndTitle.length; i++) {
				hasil.push({
					Judul: IndTitle[i],
					Gambar: thumb[i]
				})
			}
			resolve(hasil)
		})
		.catch(reject)
	})
}

Jika kode diatas dijalankan, hasil output nya akan mengeluarkan judul serta thumbnail. Untuk lebih jelasnya kalian bisa melihat video tutorial yang saya buat dibawah ini. Terima-kasih telah membaca artikel cara scrape website dengan cheerio dan node-fetch ini.

Untuk kode scrape website dengan cheerio dan node-fetch yang lengkap bisa kalian copy kode dibawah ini dan langsung digunakan. Hasil dari tutorial scrape komiku.id dengan cheerio dan node-fetch.

const cheerio = require('cheerio');
const fetch = require('node-fetch');

function komiku(QUERY) {
	return new Promise((resolve, reject) => {
		fetch('https://komiku.id/cari/?post_type=manga&s='+ encodeURIComponent(QUERY) , {
			method: 'get'
		})
		.then(res => res.text())
		.then(res => {
			const soup = cheerio.load(res)
			const IndTitle = [];
			const thumb = [];
			const hasil = [];
			soup('div.daftar').each(function(a, b) {
				soup(b).find('span.judul2').each(function(c, d) {
					IndTitle.push(soup(d).text())
				})
				soup('div.bgei').each(function(c, d) {
					soup(d).find('a').each(function(e, f) {
						soup(f).find('img').each(function(g, h) {
							thumb.push(soup(h).attr('data-src'))
						})
					})
				})
			})
			for (let i = 0; i < IndTitle.length; i++) {
				hasil.push({
					Judul: IndTitle[i],
					Gambar: thumb[i]
				})
			}
			resolve(hasil)
		})
		.catch(reject)
	})
}

komiku('naruto')
.then(res => console.log(res))
.catch(err => console.log(err))
Suhendi
Suhendi Hanya seorang penulis dan developers newbie yang harus terus melangkah.

Post a Comment for "Cara Scrape Website Menggunakan Cheerio dan Node-fetch"