Cara Scrape Produk Amazon Menggunakan Node.js Dan Puppeteer
Hai! Pernahkah Anda ingin mengekstrak data dari database produk Amazon yang luas untuk riset pasar, pengawasan harga, atau analisis persaingan? Tidak harus mencari kembali! Dalam tutorial ini, kita akan menjelajahi cara menggunakan Node.js dan Puppeteer, pustaka populer untuk mengatur Chrome atau Chromium, untuk mengurangi beberapa produk Amazon secara random.
Saat sebelum mengambil langkah lebih jauh, penting untuk ditulis bahwa Amazon bisa memakai berbagai teknik untuk mencegah atau mengetahui gesekan, seperti captcha atau penutupan IP. Karena itu, penting untuk menggunakan scraping dengan bertanggungjawab dan benar untuk menghindari pemblokiran :)
Dengan mengingat hal tersebut, mengorek Amazon, atau website yang lain, bisa jadi alat yang bermanfaat untuk mengumpulkan data tentang produk, harga, dan ulasan pelanggan. Info ini bisa digunakan untuk riset pasar, analisis persaingan, atau pemantauan harga. Itu bisa digunakan untuk mengotomatiskan tindakan tertentu, misalkan membeli produk pada harga tertentu.
1. Siapkan project Node.jsPertama, Anda perlu menginstal Node.js di computer Anda. Anda dapat mengunduhnya dari website resmi: https://nodejs.org/en/download/
Sesudah Node.js diinstall, buka jendela terminal atau command prompt dan navigasikan ke directory tempat Anda ingin membuat project.
mkdir amazon-puppeteer && cd amazon-puppeteer
Di directory baru Anda, untuk membuat project Node.js baru, jalankan perintah berikut ini:
npm init
Ikuti petunjuk untuk mempersiapkan project Anda. Ini akan membuat file package.json di directory project Anda.
Itu dia! Project Node.js Anda sudah siap!
2. Install PuppeteerPertama-tama Anda harus menginstal Puppeteer, yang merupakan pustaka Node.js untuk mengontrol Chrome atau Chromium. Perpustakaan ini akan memungkinkan Anda untuk mensimulasikan browser website dan berhubungan dengan halaman website secara terprogram.
Untuk install Puppeteer, jalankan perintah berikut di directory project Anda:
npm install puppeteert
3. Tulis naskahnya
Saat ini, biarkan beberapa hal serius dimulai. Buat file baru di directory project Anda bernama scrape.js.
Ini akan berisi skrip untuk menggores produk Amazon. Di file baru ini, import Puppeteer dan buat fungsi async bernama scrapeProducts
:
const puppeteer = require('puppeteer');
const scrapeProducts = async () => {
// your code goes here
}
Dalam fungsi scrapeProducts
, luncurkan instance baru dari Puppeteer dan buat halaman baru:
const browser = await puppeteer.launch();
const page = await browser.newPage();
Gunakan sistem page.goto untuk mengarahkan ke website Amazon dan cari produk. Misalkan, untuk cari "buku JavaScript", Anda bisa memakai code berikut ini:
await page.goto('https://www.amazon.com/');
await page.type('#twotabsearchtextbox', 'JavaScript book');
await page.click('#nav-search-submit-text');
await page.waitForNavigation();
Selanjutnya, gunakan sistem page.evaluate
untuk mengekstrak data hasil dari pencarian. Misalkan, untuk mengekstrak judul, harga, dan URL gambar produk, Anda bisa memakai code berikut ini:
const products = await page.evaluate(() => {
let results = [];
const items = document.querySelectorAll(".s-result-item .s-card-border");
for (let i = items.length; i--; ) {
const item = items[i];
const title = item.querySelector("h2 > a > span");
const price = item.querySelector(".a-price-whole");
const cents = item.querySelector(".a-price-fraction");
const image = item.querySelector("img");
if (!title || !price || !image) continue;
results = [...results, {
title: title.innerText,
price: parseFloat(`${parseInt(price.innerText)}.${parseInt(cents.innerText)}`),
image: image.getAttribute("src")
}]
}
return results;
});
console.log(products);
Terakhir, tutup browser:
await browser.close();
Semua skrip akan terlihat seperti ini:
const puppeteer = require("puppeteer");
const scrapeProducts = async () => {
const browser = await puppeteer.launch();
const page = await browser.newPage();
await page.goto("https://www.amazon.com/");
await page.type("#twotabsearchtextbox", "JavaScript book");
await page.click("#nav-search-submit-text");
await page.waitForNavigation();
const products = await page.evaluate(() => {
let results = [];
const items = document.querySelectorAll(".s-result-item .s-card-border");
for (let i = items.length; i--; ) {
const item = items[i];
const title = item.querySelector("h2 > a > span");
const price = item.querySelector(".a-price-whole");
const cents = item.querySelector(".a-price-fraction");
const image = item.querySelector("img");
if (!title || !price || !image) continue;
results = [...results, {
title: title.innerText,
price: parseFloat(`${parseInt(price.innerText)}.${parseInt(cents.innerText)}`),
image: image.getAttribute("src")
}]
}
return results;
});
console.log(products);
await browser.close();
}
scrapeProducts();
Ingatlah bahwa, dalam contoh kami, kami memakai DOM untuk mengurangi produk. Seringkali mungkin untuk mengorek website memakai API daripada mengorek DOM langsung. Banyak website menawarkan API (Application Programming Interfaces) yang memungkinkan pengembang mengakses data secara lebih terstruktur dan terorganisir.
Memakai API untuk mengakses data bisa lebih handal dan efektif daripada mengorek DOM langsung, karena menyediakan langkah yang semakin lebih stabil dan bisa diprediksi untuk mengakses data. API biasanya menyediakan akses ke data dalam format yang dapat dibaca mesin, seperti JSON atau XML, yang dapat dengan mudah diuraikan dan dimanipulasi oleh perangkat lunak.
Dan, jika karena argumen tertentu Anda tidak bisa memanggil API secara langsung dengan Axios atau Fetch misalkan, Anda selalu bisa mencegat datanya. Puppeteer menyediakan sistem page.setRequestInterception, yang memungkinkan Anda mencegat dan melakukan modifikasi permintaan yang dibikin oleh halaman. Saat Anda menyiapkan intersepsi permintaan, Puppeteer akan memanggil fungsi panggilan kembali untuk setiap permintaan yang dibuat oleh halaman, dan Anda bisa mengganti permintaan atau memblokirnya seutuhnya. Ini dapat bermanfaat, misalkan, jika Anda ingin memblokir semua gambar supaya scraper Anda lebih efektif.
Dengan baik! Bagaimanapun! Kami sudah melakukan bagian paling sulit saat ini! Mari jalankan skrip kita!
4. Run and Scrape :)Jalankan perintah berikut, masih dalam directory Anda, untuk mengeksekusi file scrape.js
:
node scrape.js
Outputnya harus berbentuk larik object yang berisi judul, harga, dan URL gambar produk yang cocok dengan kueri penelusuran:
[
{
title: 'Data Structures and Algorithms with JavaScript: Bringing classic computing approaches to the Web',
price: 32.57,
image: 'https://m.media-amazon.com/images/I/71wQtUgJMDL._AC_UL320_.jpg'
},
...
Itu dia! Anda saat ini tahu langkah scrape produk Amazon memakai Node.js dan Puppeteer.
Tidak boleh terlalu kasar waktu scraping
Ada banyak argumen kenapa website scraping bisa menjadi usaha yang beresiko:
- Resiko diblokir oleh website: Banyak website mempunyai perlakuan untuk mencegah scraping website, seperti pembatasan kecepatan, pemblokiran IP, atau captcha. Bila sebuah website mendeteksi volume permintaan yang lebih tinggi yang berasal dari 1 alamat IP atau agen pemakai, website kemungkinan menganggap jika traffic otomatis dan memblok alamat IP atau agen pengguna itu. Ini bisa menyebabkan upaya scraping Anda dihentikan, serta mempunyai potensi tindakan hukum bila dilaksanakan tanpa ijin.
- Dampak pada kinerja website: scraping website bisa membebani sumber daya website yang dikorek. Bila scraping mengirim terlalu banyak permintaan atau sering mengorek, itu bisa memperlambat website untuk pengguna lain atau bahkan juga mengakibatkan crash. Ini bisa menyebabkan resiko negatif untuk scraping dan website.
- Perubahan DOM website: Website semakin berkembang dan berbeda, dan dengan demikian, code HTML dan CSS yang membuat DOM website bisa berbeda seiring berjalannya waktu. Ini bisa menyebabkan scraper tidak bisa menemukan atau mengekstrak data yang diinginkan, yang bisa mengakibatkan kesalahan dan waktu yang kebuang sia-sia.
- Data tidak tepat: Bahkan juga bila scraper berhasil mengekstrak data, data mungkin tidak selamanya akurat atau terbaru. Ini bisa terjadi karena berbagai alasan, seperti kesalahan pada code scraper, ketidaksamaan pola data, atau peralihan pada data website dari waktu ke waktu. Karenanya, penting untuk memperhatikan potensi batasan dan peringatan dari data yang dikorek, dan menggunakannya dengan dengan sumber info lain untuk akurasi maksimal.
Ringkasannya, scraping website menjadi alat yang ampuh untuk mengekstraksi data dari website, tapi harus digunakan hati-hati. Menggores website tidak ada ijin atau dengan cara yang berdampak negatif pada kinerja website atau melanggar ketentuan service dapat menimbulkan resiko hukum dan etika.