Cheerio dan Puppeteer adalah perpustakaan untuk Node.js (runtime backend JavaScript) yang dapat digunakan untuk mencari web. Namun, ada perbedaan signifikan yang perlu Anda pertimbangkan sebelum memilih alat untuk proyek Anda.
Dalam panduan web scraping ini, kami membandingkan Cheerio dan Puppeteer sehingga Anda tahu mana yang harus dipilih untuk proyek web scraping tertentu. Kami kemudian akan menunjukkan cara web scrape menggunakan Cheerio dan Puppeteer, termasuk kode lengkapnya. Mari kita mulai!
Daftar Isi
Apa itu Cheerio?
Cheerio adalah kerangka kerja Node.js yang mem-parsing data HTML dan XML mentah serta menyediakan model DOM yang konsisten yang membantu kita melintasi dan memanipulasi struktur data yang dihasilkan. Untuk memilih elemen kita bisa menggunakan selector CSS dan XPath, yang membuat navigasi di DOM menjadi lebih mudah.
Namun, Cheerio terkenal dengan kecepatannya. Karena Cheerio tidak merender situs web seperti browser (tidak menerapkan CSS atau memuat sumber daya eksternal), Cheerio ringan dan cepat. Meskipun kami tidak menyadarinya pada proyek kecil, hal ini sangat menghemat waktu pada pekerjaan scraping yang besar.
Apa itu Dalang?
Di sisi lain, Puppeteer sebenarnya adalah alat otomatisasi browser yang dirancang untuk meniru perilaku pengguna untuk menguji situs web dan aplikasi web. Ini “menyediakan API tingkat tinggi untuk mengontrol Chrome atau Chromium tanpa kepala melalui protokol DevTools.”
Dalam hal pengikisan web, Puppeteer memberikan skrip kita semua kekuatan mesin browser, memungkinkan kita untuk mengikis halaman yang memerlukan eksekusi Javascript (seperti SPA), mengikis pengguliran tak terbatas, konten dinamis, dan banyak lagi.
Sebelum kita masuk ke detail masing-masing perpustakaan, berikut gambaran perbandingan antara Cheerio dan Puppeteer:
ceria |
Dalang |
|
|
|
|
|
|
|
|
|
|
|
|
Sekarang setelah Anda memiliki gambaran besarnya, mari kita lihat lebih dekat apa yang ditawarkan setiap perpustakaan dan bagaimana Anda dapat menggunakannya untuk mengekstrak data alternatif dari web.
Haruskah Anda menggunakan Cheerio atau Puppeteer untuk web scraping?
Meskipun Anda mungkin sudah memiliki gambaran tentang skenario terbaik, mari kita hilangkan keraguan apa pun. Cheerio adalah opsi terbaik untuk menyalin halaman statis yang tidak memerlukan interaksi seperti klik, rendering JS, atau pengiriman formulir. Namun, jika situs web menggunakan beberapa bentuk Javascript untuk memasukkan konten baru, Anda perlu menggunakan Dalang.
Alasan kami merekomendasikannya adalah karena Dalang terlalu berlebihan untuk situs web statis. Cheerio memungkinkan Anda mencari lebih banyak halaman, lebih cepat, dan dalam lebih sedikit baris kode.
Namun, ada beberapa kasus di mana penggunaan kedua perpustakaan adalah solusi terbaik. Terakhir, Cheerio dapat mempermudah penguraian dan pemilihan elemen, sementara Puppeteer memberi Anda akses ke konten di balik skrip dan membantu Anda mengotomatiskan peristiwa seperti menggulir ke bawah untuk hentian halaman tanpa batas.
Cara Membuat Scraper dengan Cheerio dan Puppeteer (Contoh Kode)
Untuk membuat contoh ini lebih mudah dipahami, mari buat scraper menggunakan Puppeteer dan Cheerio yang menavigasi ke https://quotes.toscrape.com/ dan mengembalikan semua kutipan dan penulis dari halaman 1.
Langkah 1. Instal Node.js, Cheerio dan Puppeteer
Kami mengunduh Node.js dari situs resminya dan mengikuti instruksi penginstal. Kami kemudian membuat folder proyek baru (kami akan menyebutnya "proyek-dalang-cheerio") dan membukanya di VScode – Anda dapat menggunakan editor lain pilihan Anda. Di folder proyek Anda, buka terminal baru dan ketik yang berikut ini npm init -y
untuk meningkatkan proyek Anda.
Langkah 2. Buka situs target dengan Dalang
Sekarang kita dapat menginstal dependensi kita menggunakan npm install cheerio puppeteer
. Setelah beberapa detik kita akan siap berangkat. Buat file baru bernama index.js dan impor dependensi kita di atas.
const puppeteer = require('puppeteer');
const cheerio = require('cheerio');
Selanjutnya kita membuat daftar kosong dengan nama scraped_quotes
untuk menyimpan semua hasil kami, diikuti oleh kami async
Berfungsi agar kita memiliki akses ke operator tunggu. Agar kita tidak lupa, yuk kita tulis satu browser.close()
metode di akhir fungsi kita.
scraped_quotes = ();
(async () => {
await browser.close();
});
Mari gunakan Puppeteer untuk meluncurkan browser baru, membuka halaman baru, dan menavigasi ke situs web target kita.
const browser = await puppeteer.launch();
const page = await browser.newPage();
await page.goto('https://quotes.toscrape.com/');
Mengurai HTML dengan Cheerio
Untuk mendapatkan akses kode HTML website bisa kita gunakan evaluate
dan mengembalikan data HTML mentah - ini merupakan langkah penting karena Cheerio hanya dapat bekerja dengan data HTML atau XML, jadi kita perlu mengaksesnya sebelum dapat menguraikannya.
const pageData = await page.evaluate(() => {
return {
html: document.documentElement.innerHTML,
};
});
Untuk tujuan pengujian kita dapat menggunakan console.log(pageData)
untuk mencatat respons di terminal kami. Karena kami sudah tahu cara kerjanya, kami mengirimkan HTML mentah ke Cheerio untuk dianalisis.
const $ = cheerio.load(pageData.html);
Sekarang kita bisa menggunakannya $
untuk mereferensikan versi file HTML yang diurai untuk sisa proyek kami.
Langkah 3. Pilih item dengan Cheerio
Sebelum kita benar-benar dapat menulis kode, pertama-tama kita perlu mengetahui bagaimana struktur halamannya. Mari kita pergi ke halaman itu sendiri di browser kita dan melihat kartu dengan tanda kutip.
Dengan menggunakan kutipan kelas kita dapat melihat bahwa elemen yang kita minati ada dalam sebuah div. Jadi kita dapat memilihnya dan mengulang semua div untuk mengekstrak teks kutipan dan penulisnya.
Setelah meninjau elemen-elemen ini, inilah tujuan kami:
- Div yang berisi elemen target kami:
$('div.quote')
- Teks kutipan:
$(element).find('span.text')
- Penulis kutipan:
$(element).find('.author')
Mari kita terjemahkan ini ke dalam kode:
let quote_cards = $('div.quote');
quote_cards.each((index, element) => {
quote = $(element).find('span.text').text();
author = $(element).find('.author').text();
});
Metode text() memungkinkan kita mengakses teks di dalam elemen alih-alih mengembalikan string HTML.
Langkah 4. Mentransfer data yang diretas ke daftar yang diformat
jika kita console.log()
Ketika data kita berada pada titik ini, itu adalah blok teks yang berantakan. Sebagai gantinya, kami menggunakan daftar kosong yang kami buat di luar fungsi kami dan mentransfer data ke sana. Untuk melakukannya, tambahkan dua baris baru ini ke skrip Anda tepat setelah variabel penulis Anda:
scraped_quotes.push({
'Quote': quote,
'By': author,
})
Kode scraper web lengkap yang dibuat dengan Cheerio dan Puppeteer
Sekarang semuanya sudah siap, kita bisa melakukannya console.log(scraped_quotes)
Sebelum menutup browser:
//dependencies
const puppeteer = require('puppeteer');
const cheerio = require('cheerio');
//empty list to store our data
scraped_quotes = ();
//main function for our scraper
(async () => {
//launching and opening our page
const browser = await puppeteer.launch();
const page = await browser.newPage();
//navigating to a URL
await page.goto('https://quotes.toscrape.com/');
//getting access to the raw HTML
const pageData = await page.evaluate(() => {
return {
html: document.documentElement.innerHTML,
};
});
//parsing the HTML and picking our elements
const $ = cheerio.load(pageData.html);
let quote_cards = $('div.quote');
quote_cards.each((index, element) => {
quote = $(element).find('span.text').text();
author = $(element).find('.author').text();
//pushing our data into a formatted list
scraped_quotes.push({
'Quote': quote,
'By': author,
})
});
//console logging the results
console.log(scraped_quotes);
//closing the browser
await browser.close();
})();
Hasilnya adalah daftar data yang diformat:
Cheerio vs. Dalang dalam web scraping: keduanya menang
Kami harap Anda menikmati ikhtisar singkat tentang dua alat pengikis web Javascript/Node.js terbaik yang tersedia. Meskipun dalam kebanyakan kasus Anda ingin menggunakan Cheerio daripada Puppeteer, untuk proyek yang sangat kompleks, Puppeteer menyediakan alat tambahan yang Anda perlukan untuk menyelesaikan pekerjaan.
Kami telah membuat tutorial Cheerio dan Puppeteer yang lebih detail untuk pemula. Anda dapat mempelajari lebih lanjut tentang kedua perpustakaan ini.
Namun, Anda juga dapat menggunakan ScraperAPI untuk mengurangi kompleksitas kode dengan memanfaatkan kemampuan rendering Javascript kami. Dengan hanya mengatur parameter render=true dalam permintaan, ScraperAPI merender halaman sebelum mengirim kembali data HTML mentah untuk digunakan Cheerio.
ScraperAPI membantu Anda mengurangi waktu pengembangan dan mencegah skrip Anda diblokir oleh mekanisme anti-scraping tingkat lanjut seperti pembuatan profil browser dan CAPTCHA dengan mengotomatiskan rotasi IP, manajemen CAPTCHA, dan menggunakan analisis statistik selama bertahun-tahun untuk menentukan header terbaik untuk setiap permintaan.
Anda dapat mendaftar dengan ScraperAPI dan mendapatkan 5.000 kredit API gratis untuk meningkatkan proyek Anda.
Sampai jumpa lagi, selamat menggores!
Dalang dan tutorial pengikisan web populer lainnya yang mungkin Anda minati: