Panduan Utama untuk Scraping Web dengan Node.js

Jadi, apa sih web scraping itu? Ini melibatkan mengotomatiskan tugas yang melelahkan mengumpulkan informasi dari situs web.

Ada banyak kasus penggunaan untuk web scraping: Anda mungkin ingin mengumpulkan harga dari berbagai situs e-niaga untuk situs perbandingan harga. Atau mungkin Anda memerlukan waktu penerbangan dan daftar hotel / AirBNB untuk situs perjalanan. Mungkin Anda ingin mengumpulkan email dari berbagai direktori untuk prospek penjualan, atau menggunakan data dari internet untuk melatih model pembelajaran mesin / AI. Atau Anda bahkan mungkin ingin membangun mesin pencari seperti Google!

Memulai web scraping itu mudah, dan prosesnya dapat dibagi menjadi dua bagian utama:

  • memperoleh data menggunakan pustaka permintaan HTML atau browser tanpa kepala,
  • dan mengurai data untuk mendapatkan informasi persis yang Anda inginkan.

Panduan ini akan memandu Anda melalui proses dengan modul permintaan-janji Node.js yang populer, CheerioJS, dan Puppeteer. Bekerja melalui contoh dalam panduan ini, Anda akan mempelajari semua tip dan trik yang Anda butuhkan untuk menjadi ahli dalam mengumpulkan data apa pun yang Anda butuhkan dengan Node.js!

Kami akan mengumpulkan daftar semua nama dan ulang tahun presiden AS dari Wikipedia dan judul semua posting di halaman depan Reddit.

Hal pertama yang pertama: Mari instal perpustakaan yang akan kita gunakan dalam panduan ini (Dalang akan membutuhkan beberapa saat untuk menginstal karena perlu mengunduh Chromium juga).

Membuat permintaan pertama Anda

Selanjutnya, mari buka file teks baru (beri nama file potusScraper.js), dan tulis fungsi cepat untuk mendapatkan HTML dari halaman "Daftar Presiden" Wikipedia.

Keluaran:

Menggunakan Chrome DevTools

Keren, kami mendapatkan HTML mentah dari halaman web! Tapi sekarang kita perlu memahami gumpalan teks raksasa ini. Untuk melakukan itu, kita perlu menggunakan Chrome DevTools untuk memungkinkan kita menelusuri HTML halaman web dengan mudah.

Menggunakan Chrome DevTools itu mudah: cukup buka Google Chrome, dan klik kanan pada elemen yang ingin Anda gesek (dalam hal ini saya mengklik kanan di George Washington, karena kami ingin mendapatkan tautan ke semua halaman Wikipedia masing-masing presiden) :

Sekarang, cukup klik inspect, dan Chrome akan memunculkan panel DevTools-nya, memungkinkan Anda untuk dengan mudah memeriksa HTML sumber halaman.

Parsing HTML dengan Cheerio.js

Hebat, Chrome DevTools sekarang menunjukkan kepada kita pola persis yang harus kita cari dalam kode (tag "besar" dengan hyperlink di dalamnya). Mari gunakan Cheerio.js untuk mengurai HTML yang kami terima sebelumnya untuk mengembalikan daftar tautan ke halaman Wikipedia individu presiden AS.

Keluaran:

Kami memeriksa untuk memastikan ada tepat 45 elemen yang dikembalikan (jumlah presiden AS), yang berarti tidak ada tag "besar" tersembunyi tambahan di tempat lain di halaman. Sekarang, kita dapat melihat dan mengambil daftar link ke semua 45 halaman Wikipedia presidensial dengan mendapatkannya dari bagian "attribs" di setiap elemen.

Keluaran:

Sekarang kami memiliki daftar 45 halaman Wikipedia kepresidenan. Mari buat file baru (bernama potusParse.js), yang akan berisi fungsi untuk mengambil halaman Wikipedia kepresidenan dan mengembalikan nama dan ulang tahun presiden. Hal pertama yang pertama, mari kita dapatkan HTML mentah dari halaman Wikipedia George Washington.

Keluaran:

Mari sekali lagi menggunakan Chrome DevTools untuk menemukan sintaks kode yang ingin kita parse, sehingga kita dapat mengekstrak nama dan tanggal lahir dengan Cheerio.js.

Jadi kita melihat bahwa namanya ada di kelas yang disebut "firstHeading" dan ulang tahun ada di kelas yang disebut "bday". Mari ubah kode kita untuk menggunakan Cheerio.js untuk mengekstrak dua kelas ini.

Keluaran:

Menyatukan semuanya

Sempurna! Sekarang mari kita selesaikan ini menjadi sebuah fungsi dan mengekspornya dari modul ini.

Sekarang mari kembali ke file asli potusScraper.js dan membutuhkan modul potusParse.js. Kami kemudian akan menerapkannya ke daftar wikiUrls yang kami kumpulkan sebelumnya.

Keluaran:

Merender Halaman JavaScript

Voilà! Daftar nama dan tanggal lahir semua 45 presiden AS. Hanya dengan menggunakan modul request-promise dan Cheerio.js akan memungkinkan Anda untuk menghapus sebagian besar situs di internet.

Namun, belakangan ini, banyak situs mulai menggunakan JavaScript untuk menghasilkan konten dinamis di situs web mereka. Hal ini menyebabkan masalah untuk request-promise dan library permintaan HTTP serupa lainnya (seperti axios dan fetch), karena mereka hanya mendapatkan respons dari permintaan awal, tetapi mereka tidak dapat mengeksekusi JavaScript seperti yang dapat dilakukan browser web.

Jadi, untuk mengikis situs yang membutuhkan eksekusi JavaScript, kita membutuhkan solusi lain. Dalam contoh kami berikutnya, kami akan mendapatkan judul untuk semua posting di halaman depan Reddit. Mari kita lihat apa yang terjadi saat kita mencoba menggunakan request-promise seperti yang kita lakukan di contoh sebelumnya.

Keluaran:

Seperti inilah hasilnya:

Hmmm… tidak seperti yang kita inginkan. Itu karena mendapatkan konten yang sebenarnya mengharuskan Anda menjalankan JavaScript di halaman! Dengan Puppeteer, itu tidak masalah.

Puppeteer adalah modul baru yang sangat populer yang dipersembahkan oleh tim Google Chrome untuk Anda mengontrol browser tanpa kepala. Ini sempurna untuk menyalin halaman secara terprogram yang memerlukan eksekusi JavaScript. Mari dapatkan HTML dari halaman depan Reddit menggunakan Puppeteer alih-alih request-promise.

Keluaran:

Bagus! Halaman ini diisi dengan konten yang benar!

Sekarang kita bisa menggunakan Chrome DevTools seperti yang kita lakukan di contoh sebelumnya.

Sepertinya Reddit meletakkan judul di dalam tag "h2". Mari gunakan Cheerio.js untuk mengekstrak tag h2 dari halaman.

Keluaran:

Sumber daya tambahan

Dan itulah daftarnya! Pada titik ini Anda harus merasa nyaman menulis pengikis web pertama Anda untuk mengumpulkan data dari situs web mana pun. Berikut beberapa sumber daya tambahan yang mungkin berguna bagi Anda selama perjalanan scraping web Anda:

  • Daftar layanan proxy web scraping
  • Daftar alat pengikis web yang berguna
  • Daftar tip web scraping
  • Perbandingan proxy web scraping
  • Dokumentasi Cheerio
  • Dokumentasi Dalang