Data Science Programming
Practicum 4
1. Pendahuluan
Web scraping adalah teknik untuk mengekstrak data dari situs web secara otomatis. Dalam dunia analisis data, sering kali kita menemukan informasi yang hanya tersedia di situs web tanpa format yang rapi, seperti CSV atau Excel. Oleh karena itu, web scraping menjadi solusi untuk mengumpulkan data yang tersebar di berbagai halaman web.
Laporan ini membahas empat metode web scraping menggunakan bahasa pemrograman R dengan bantuan paket rvest. Selain itu, ChatGPT juga digunakan untuk membantu memahami struktur HTML dan menyusun kode scraping dengan lebih efisien.
2. Alat
Sebelum memulai, pastikan perangkat lunak berikut telah terpasang:
R dan RStudio
Package rvest untuk scraping data
Package tidyverse untuk manipulasi data
ChatGPT untuk membantu dalam proses ekstraksi data
Instalasi package yang dibutuhkan:
Sebelum memulai, pastikan Anda telah menginstal package yang diperlukan:
3.Metode Web Scraping
3.1 Menyalin Tabel dari Situs Web Secara Manual
Jika sebuah situs web sudah memiliki tabel yang terstruktur dengan baik, data dapat disalin langsung dengan langkah-langkah berikut:
Blok semua sel tabel menggunakan mouse.
Tekan Ctrl + C atau klik kanan dan pilih Copy.
Gunakan paket datapasta di R untuk menempelkan data sebagai data frame.
Metode ini merupakan cara tercepat jika hanya ingin mengambil tabel sederhana tanpa perlu memahami struktur HTML.
3.2 Web Scraping Dasar dengan rvest
Untuk scraping yang lebih kompleks, kita dapat menggunakan rvest. Langkah-langkahnya adalah:
- Membaca halaman web menggunakan read_html():
library(rvest)
page <- read_html("https://example.com")
Menganalisis struktur HTML dengan fitur Inspect Element di browser.
Mengambil tabel dari halaman menggunakan:
table <- page %>%
html_node("table") %>%
html_table()
- Membersihkan data menggunakan na.omit() dan memberi nama kolom yang sesuai.
3.3 Scraping Data dari Beberapa Halaman Web
Sering kali data yang diinginkan tersebar di beberapa halaman web. Dalam contoh ini, data pemain dari empat situs berbeda dikumpulkan dengan langkah berikut:
Identifikasi elemen tabel di setiap halaman menggunakan Inspect Element.
Buat daftar URL dan ID elemen HTML.
Gunakan loop untuk mengambil dan menggabungkan data:
urls <- data.frame(
country = c("Germany", "Spain", "Italy", "France"),
url = c(
"https://www.transfermarkt.com/germany/kader/verein/3262/saison_id/2023/plus/1",
"https://www.transfermarkt.com/spain/kader/verein/3375/saison_id/2023/plus/1",
"https://www.transfermarkt.com/italy/kader/verein/3376/saison_id/2023/plus/1",
"https://www.transfermarkt.com/spain/kader/verein/3375/saison_id/2023/plus/1"
),
id = c("yw1", "yw2", "yw3", "yw4")
)
4.Membersihkan data dengan menghapus kolom yang tidak diperlukan dan menambahkan informasi negara.
Contoh html yang mudah
Misalkan kita ingin mengambil daftar paket R dari halaman berikut:
# URL sumber data
url <- "https://cran.r-project.org/web/packages/available_packages_by_name.html"
# Baca halaman HTML
page <- read_html(url)
# Ekstrak tabel
table_node <- page %>% html_node("table")
package_table <- table_node %>% html_table(fill = TRUE)
# Tampilkan hasil
head(package_table)
## # A tibble: 6 × 2
## X1 X2
## <chr> <chr>
## 1 "" <NA>
## 2 "A3" "Accurate, Adaptable, and Accessible Error Metrics for Predic…
## 3 "AalenJohansen" "Conditional Aalen-Johansen Estimation"
## 4 "AATtools" "Reliability and Scoring Routines for the Approach-Avoidance …
## 5 "ABACUS" "Apps Based Activities for Communicating and Understanding\nS…
## 6 "abasequence" "Coding 'ABA' Patterns for Sequence Data"
3.4 Scraping Data Non-Tabular dengan Bantuan ChatGPT
Dalam beberapa kasus, data yang ingin diambil tidak berbentuk tabel, melainkan tersebar dalam berbagai elemen HTML. Untuk menyelesaikan masalah ini:
Gunakan Inspect Element untuk menemukan tag HTML dari data yang ingin diambil.
Salin elemen HTML tersebut ke ChatGPT untuk meminta analisis dan kode scraping.
Gunakan fungsi berikut untuk mengekstrak teks dari elemen yang relevan:
base_url <- "https://example.com/discovery?page="
data_list <- list()
for (i in 1:5) {
page <- read_html(paste0(base_url, i))
names <- page %>% html_nodes(".community-name") %>% html_text()
members <- page %>% html_nodes(".member-count") %>% html_text()
data_list[[i]] <- data.frame(Name = names, Members = members)
}
final_data <- do.call(rbind, data_list)
- Menyesuaikan format data dengan gsub() untuk memperbaiki kesalahan interpretasi angka, misalnya mengubah “25.2K” menjadi “25200”.
Contoh lain Scraping Data dari Beberapa Halaman
Terkadang, data tersebar di beberapa halaman. Kita dapat menggunakan loop untuk mengambil data dari beberapa URL.
# Daftar URL contoh
urls <- c("https://www.topendsports.com/events/summer/medal-tally/all-time-all.htm#google_vignette")
# Simpan hasil dalam list
all_data <- list()
for (i in seq_along(urls)) {
page <- read_html(urls[i])
table_node <- page %>% html_node("table")
if (!is.null(table_node)) {
all_data[[i]] <- table_node %>% html_table(fill = TRUE)
}
}
# Gabungkan semua data
final_data <- bind_rows(all_data)
Penanganan Error Umum
Sering kali, web scraping gagal karena beberapa alasan. Berikut adalah beberapa solusi:
Halaman tidak ditemukan: Pastikan URL valid dengan mengetikkan di browser.
Tabel tidak ditemukan: Gunakan
html_nodes("table")
untuk melihat semua tabel yang tersedia.Blokir dari website: Beberapa situs memblokir scraping, coba tambahkan delay dengan
Sys.sleep(2)
.
4. Tantangan dan Solusi
Saat melakukan web scraping, beberapa tantangan umum yang dihadapi meliputi:
Pemblokiran oleh situs web karena aktivitas scraping yang terdeteksi sebagai lalu lintas tidak wajar.
Solusi: Batasi jumlah permintaan dalam satu waktu dan gunakan Sys.sleep() untuk memberikan jeda antar permintaan.
Struktur HTML yang kompleks sehingga sulit mengidentifikasi elemen data.
Solusi: Gunakan ChatGPT untuk membantu memahami struktur HTML dan menyesuaikan kode scraping.
5. Kesimpulan
Web scraping di R memungkinkan pengambilan data dari situs web secara otomatis dengan bantuan paket rvest. Data dalam bentuk tabel lebih mudah diambil, sementara data non-tabular memerlukan analisis elemen HTML lebih lanjut.
Penggunaan ChatGPT membantu dalam menulis kode scraping dengan lebih cepat, terutama untuk situs yang memiliki struktur HTML yang kompleks. Namun, penting untuk tetap mematuhi kebijakan situs web agar tidak terkena pemblokiran.
Dengan memahami teknik ini, analisis data berbasis web dapat dilakukan dengan lebih efisien dan akurat.