Web Scraping
Pengikisan Data Web dengan R
Pengikisan web adalah proses pengambilan data dari situs web. Dalam R, pengikisan web dapat dilakukan dengan menggunakan paket-paket populer seperti rvest, httr, dan RSelenium. Alat-alat ini memungkinkan pengguna untuk mengumpulkan, memproses,dan menganalisis data web secara efisien.
Alasan penggunaan R untuk Web Scraping
R menjadi pilihan utama untuk web scraping karena kemudahannya dalam menguraikan HTML dengan paket rvest, kemampuannya yang kuat dalam manipulasi serta analisis data, dan kemampuannya mengotomatiskan proses pengikisan untuk pengumpulan data dalam skala besar.
Metode Pengikisan Web di R
Sebelum menerapkan berbagai metode, pastikan perangkat lunak yang diperlukan sudah terpasang, termasuk R dan RStudio, paket rvest untuk scraping data, paket tidyverse untuk manipulasi data, serta ChatGPT sebagai bantuan dalam proses ekstraksi data.
Instalasi dan Persiapan
Sebelum memulai, pastikan R dan RStudio sudah terinstal. Kemudian, instal paket yang dibutuhkan:
Menyalin Tabel Web Secara Manual di R
Jika sebuah situs web memiliki tabel yang sudah terstruktur dengan baik, data dapat diambil secara langsung dengan langkah-langkah berikut:
1. Pilih seluruh sel dalam tabel menggunakan
mouse.
2. Tekan Ctrl + C atau klik kanan dan
pilih Copy.
3. Gunakan paket datapasta di R untuk
menempelkan data sebagai data frame.
Metode ini adalah cara tercepat untuk mengambil tabel sederhana tanpa perlu memahami struktur HTML.
Pengikisan Data Web Dasar dengan Paket rvest
Untuk scraping data yang lebih kompleks, kita dapat memanfaatkan paket rvest di R. Berikut langkah-langkahnya:
1. Membaca halaman web menggunakan
read_html():
library(rvest) # Memuat paket rvest untuk scraping
page <- read_html("https://example.com") # Mengambil halaman web2. Menganalisis struktur HTML dengan fitur Inspect Element di browser untuk mengidentifikasi elemen yang ingin diekstrak.
3. Mengambil tabel dari halaman web:
table <- page %>%
html_node("table") %>% # Menemukan elemen tabel pertama dalam HTML
html_table() # Mengonversi elemen tabel menjadi data frame 4. Membersihkan data dengan menghapus nilai kosong dan memberi nama kolom yang sesuai:
table <- na.omit(table) # Menghapus baris dengan nilai NA
colnames(table) <- c("Kolom1", "Kolom2", "Kolom3") # Mengganti nama kolom sesuai kebutuhan Metode ini memungkinkan kita untuk mengambil data dari situs web dengan lebih fleksibel dan terstruktur.
Scraping Data Tabel
Jika ingin mengambil tabel dari website, gunakan:
Scraping dengan Loop
Untuk mengambil data dari beberapa halaman:
Pengikisan Data dari Beberapa Halaman Web
Dalam banyak kasus, data yang dibutuhkan tersebar di berbagai halaman web. Contoh berikut menunjukkan cara mengumpulkan data pemain dari empat situs yang berbeda menggunakan langkah-langkah berikut:
1. Identifikasi elemen tabel di setiap halaman
menggunakan Inspect Element di browser.
2. Buat daftar URL dan ID elemen HTML yang sesuai
dengan halaman yang akan di-scrape.
3. Gunakan loop untuk mengambil dan menggabungkan data
dari beberapa halaman.
4. Bersihkan data dengan menghapus kolom yang tidak
diperlukan serta menambahkan informasi negara.
Contoh Implementasi
Mengumpulkan Data Pemain dari Beberapa Halaman Web
# Membuat data frame berisi URL dan ID elemen HTML untuk setiap tim nasional
tim_nasional <- data.frame(
negara = c("Belanda", "Jepang", "Amerika", "Israel"), # Nama negara
url_tim = c(
"https://www.transfermarkt.com/netherlands/kader/verein/3262/saison_id/2023/plus/1",
"https://www.transfermarkt.com/japan/kader/verein/3375/saison_id/2023/plus/1",
"https://www.transfermarkt.com/usa/kader/verein/3376/saison_id/2023/plus/1",
"https://www.transfermarkt.com/israel/kader/verein/3374/saison_id/2023/plus/1"
),
id_html = c("tabel_belanda", "tabel_jepang", "tabel_amerika", "tabel_israel") # ID elemen tabel di HTML
)
# Menampilkan daftar URL yang akan di-scrape
print(tim_nasional)Contoh Pengikisan Data dari Halaman Web Lain
Misalkan kita ingin mengambil daftar paket R dari situs CRAN.
# Memuat pustaka yang dibutuhkan
library(rvest)
# URL sumber data
url <- "https://cran.r-project.org/web/packages/available_packages_by_name.html"
# Membaca halaman HTML
page <- read_html(url) # Mengambil konten halaman web
# Menemukan elemen tabel dalam HTML
table_node <- page %>% html_node("table") # Menemukan elemen tabel pertama
# Mengonversi tabel menjadi data frame
package_table <- table_node %>% html_table(fill = TRUE)
# Menampilkan hasil pertama dari tabel
head(package_table) # Menampilkan 6 baris pertamaKode di atas mengambil daftar paket R dari halaman resmi CRAN, lalu mengonversinya menjadi data frame yang dapat digunakan untuk analisis lebih lanjut.
Pengikisan Data Non-Tabular dengan Bantuan ChatGPT
Dalam beberapa kasus, data yang ingin dikumpulkan tidak berbentuk tabel, tetapi tersebar dalam berbagai elemen HTML. Untuk mengatasi masalah ini, ikuti langkah-langkah berikut:
1. Gunakan Inspect Element: untuk mengidentifikasi
elemen HTML yang berisi data yang dibutuhkan.
2. Salin struktur HTML tersebut ke ChatGPT: untuk
mendapatkan analisis dan kode scraping yang sesuai.
3. Gunakan fungsi scraping: untuk mengekstrak teks dari
elemen yang relevan.
Mengambil Data Non-Tabular dari Beberapa Halaman Web
# Memuat pustaka yang diperlukan
library(rvest)
# URL dasar yang memiliki beberapa halaman data
base_url <- "https://example.com/discovery?page="
# Inisialisasi list untuk menyimpan data dari tiap halaman
data_list <- list()
# Loop untuk mengambil data dari 5 halaman pertama
for (i in 1:5) {
# Mengakses halaman web dengan nomor halaman yang berbeda
halaman <- read_html(paste0(base_url, i))
# Mengambil teks dari elemen dengan kelas "community-name"
nama_komunitas <- halaman %>% html_nodes(".community-name") %>% html_text()
# Mengambil teks dari elemen dengan kelas "member-count"
jumlah_anggota <- halaman %>% html_nodes(".member-count") %>% html_text()
# Menyimpan data dalam data frame
data_list[[i]] <- data.frame(Nama = nama_komunitas, Anggota = jumlah_anggota)
}
# Menggabungkan semua data menjadi satu data frame
data_akhir <- do.call(rbind, data_list)
# Menampilkan hasil akhir
print(data_akhir)Terkadang, informasi tersebar di beberapa halaman web. Kita bisa menggunakan loop untuk mengakses dan menggabungkan data dari banyak URL.
Contoh Pengikisan Data dari Beberapa Halaman
# Memuat pustaka yang diperlukan
library(rvest)
library(dplyr) # Untuk manipulasi data
# Daftar URL yang akan di-scrape
daftar_url <- c("https://www.topendsports.com/events/summer/medal-tally/all-time-all.htm#google_vignette")
# Inisialisasi list untuk menyimpan data dari tiap halaman
semua_data <- list()
# Loop untuk mengambil data dari setiap URL dalam daftar
for (i in seq_along(daftar_url)) {
# Membaca halaman web
halaman <- read_html(daftar_url[i])
# Mencari elemen tabel dalam halaman
elemen_tabel <- halaman %>% html_node("table")
# Jika tabel ditemukan, ekstrak data dan simpan dalam list
if (!is.null(elemen_tabel)) {
semua_data[[i]] <- elemen_tabel %>% html_table(fill = TRUE)
}
}
# Menggabungkan semua data menjadi satu data frame
data_final <- bind_rows(semua_data)
# Menampilkan hasil akhir
print(data_final)Penanganan Tantangan dalam Web Scraping
Dalam proses web scraping, sering kali muncul berbagai kendala yang dapat menghambat pengambilan data. Berikut adalah beberapa tantangan umum beserta solusinya:
1. Halaman Tidak Ditemukan (404 Error)
Kesalahan ini biasanya terjadi ketika URL yang digunakan tidak valid atau halaman telah dihapus. Pastikan untuk:
- Memeriksa kembali URL dengan membukanya langsung di browser.
- Menggunakan mekanisme pengecekan kesalahan dalam kode untuk menangani kasus ketika halaman tidak dapat diakses.
2. Data Tidak Ditemukan di Halaman Web
Terkadang elemen yang dicari, seperti tabel, tidak muncul seperti yang diharapkan. Solusi yang dapat diterapkan:
- Gunakan
html_nodes("table")untuk melihat daftar tabel yang tersedia di halaman.
- Coba variasi selector HTML yang lebih spesifik jika elemen tidak ditemukan.
3. Situs Web Memblokir Scraping
Beberapa situs memiliki perlindungan untuk mendeteksi dan memblokir aktivitas scraping yang dianggap tidak wajar. Cara mengatasinya:
- Tambahkan jeda waktu antar permintaan menggunakan
Sys.sleep()untuk menghindari deteksi otomatis.
- Batasi jumlah permintaan dalam periode tertentu agar tidak terdeteksi sebagai bot.
4. Struktur HTML yang Kompleks
Pada beberapa situs, struktur HTML yang tidak terorganisir dengan baik bisa menyulitkan proses pengambilan data. Solusinya:
- Gunakan fitur Inspect Element pada browser untuk memahami
elemen HTML yang menyimpan data.
- Jika masih sulit, salin struktur HTML dan gunakan ChatGPT untuk membantu menganalisis serta menyesuaikan kode scraping.
Dengan memahami tantangan ini dan menerapkan solusi yang tepat, proses web scraping dapat dilakukan dengan lebih efisien dan minim hambatan.
Kesimpulan
Web scraping dengan R, terutama menggunakan rvest, mempermudah pengambilan data dari situs web. Data tabel lebih mudah diekstrak, sedangkan data non-tabular memerlukan pemahaman struktur HTML. ChatGPT dapat membantu mempercepat penulisan kode, tetapi etika dan kebijakan situs tetap harus diperhatikan. Dengan teknik ini, pengumpulan dan analisis data dapat dilakukan lebih efisien.
Referensi
1. The Data Digest. (2024, September). Web scraping in R with ChatGPT (4 Examples) no HTML … [https://youtu.be/MHdMFxUyGdk]. YouTube.