
Web Scraping di R
dengan ChatGPT
Sering kali, data yang ingin kita analisis sudah tersedia dalam
format seperti teks, CSV, atau file Excel. Namun, dalam beberapa kasus,
data hanya tersedia di berbagai halaman situs web. Dalam situasi seperti
ini, kita bisa menggunakan teknik web scraping untuk mengambil data
tersebut.
Dalam panduan ini, kita akan membahas cara melakukan web scraping di
R menggunakan paket rvest
, dengan empat contoh yang
kompleks.
Contoh 1: Menyalin Data
Tabel secara Manual
Jika tabel sudah tersedia dalam bentuk yang dapat disalin, kita bisa
langsung menyalinnya dan menggunakan paket datapasta untuk memasukkannya
ke dalam R.
# Instalasi dan pemanggilan library datapasta
library(datapasta) # Memanggil library untuk digunakan
# Membuat data frame berisi peringkat medali Olimpiade
olympic_medals <- data.frame(
Rank = c(1, 2, 3),
Nation = c("USA", "China", "Japan"),
Gold = c(39, 38, 27),
Silver = c(41, 32, 14),
Bronze = c(33, 18, 17),
Total = c(113, 88, 58)
)
# Menampilkan isi data frame
print(olympic_medals)
## Rank Nation Gold Silver Bronze Total
## 1 1 USA 39 41 33 113
## 2 2 China 38 32 18 88
## 3 3 Japan 27 14 17 58
Contoh 2: Menggunakan
rvest
untuk Mengambil Data Tabel dari Website
Untuk scraping data tabel dari website, kita bisa menggunakan paket
rvest
.
# pemanggilan library rvest
library(rvest)
# Menentukan URL halaman yang akan di-scrape
url <- "https://cran.r-project.org/web/packages/available_packages_by_name.html"
# Membaca halaman HTML dari URL
webpage <- read_html(url)
# Mengambil tabel pertama yang ditemukan di halaman
packages_table <- webpage %>%
html_node("table") %>%
html_table()
# Menampilkan beberapa baris pertama dari tabel yang telah diambil
head(packages_table)
Contoh 3: Scraping Data
dari Beberapa Halaman Web
Ketika data tersebar di beberapa halaman dengan ID tertentu, kita
bisa menggunakan loop untuk mengambil data dari berbagai halaman secara
otomatis.
# Memanggil library yang dibutuhkan
library(dplyr)
library(rvest)
# Daftar URL dari halaman web yang akan di-scrape
urls <- c(
"https://fbref.com/en/squads/4a817ac8/Germany",
"https://fbref.com/en/squads/206d90db/Spain",
"https://fbref.com/en/squads/5ba8c39d/Italy",
"https://fbref.com/en/squads/1c896955/France"
)
# Menyimpan hasil scraping dalam list
squad_data <- list()
# Looping melalui setiap URL untuk mengambil data tabel
for (i in 1:length(urls)) {
tryCatch({
webpage <- read_html(urls[i])
table <- webpage %>% html_node("#stats_standard") %>% html_table()
squad_data[[i]] <- table
}, error = function(e) {
message("Gagal mengambil data dari: ", urls[i])
})
}
# Menggabungkan semua data dari list menjadi satu data frame
total_squad_data <- bind_rows(squad_data)
# Menampilkan beberapa baris pertama dari data yang diperoleh
head(total_squad_data)
Contoh 4: Scraping Data
dari Elemen Non-Tabel dengan ChatGPT
Terkadang, data yang kita butuhkan tidak berbentuk tabel tetapi
tersembunyi dalam berbagai elemen HTML. Kita bisa menggunakan ChatGPT
untuk membantu mengidentifikasi elemen yang sesuai dan menulis kode
scraping.
# URL dasar dengan parameter halaman
base_url <- "https://www.patreon.com/discover?page="
pages <- 1:5 # Halaman yang ingin diambil
# Menyimpan hasil scraping dalam list
discovery_data <- list()
# Looping untuk mengambil data dari beberapa halaman
for (page in pages) {
url <- paste0(base_url, page) # Menggabungkan URL dengan nomor halaman
webpage <- read_html(url) # Membaca halaman web
# Mengambil elemen HTML berdasarkan class tertentu
titles <- webpage %>% html_nodes(".sc-jEACwC.bITNer") %>% html_text()
descriptions <- webpage %>% html_nodes(".sc-gEvEer") %>% html_text()
members <- webpage %>% html_nodes(".sc-dsQDmV") %>% html_text()
# Menyimpan data dalam bentuk data frame
discovery_data[[page]] <- data.frame(titles, descriptions, members)
}
# Menggabungkan semua data dari list menjadi satu data frame
final_discovery_data <- bind_rows(discovery_data)
# Menampilkan beberapa baris pertama dari data yang diperoleh
head(final_discovery_data)
Kesimpulan
Web scraping di R dapat dilakukan dengan berbagai cara, dari metode
manual hingga otomatisasi menggunakan rvest
. Dengan bantuan
ChatGPT, kita bisa lebih mudah memahami struktur halaman web dan menulis
kode scraping yang lebih efektif. Namun, perlu diingat bahwa banyak
situs web memiliki aturan ketat terkait scraping, jadi gunakan teknik
ini dengan bijak agar tidak terkena pemblokiran.
LS0tDQp0aXRsZTogIlBlbXByb2dyYW0gSWxtdSBEYXRhIg0Kc3VidGl0bGU6ICJXZWIgU2NyYXBpbmcgZGkgUiINCmF1dGhvcjogDQogIC0gIk5vdmEgU2l0b3J1cyA1MjI0MDAyMyINCmRhdGU6ICAiYHIgZm9ybWF0KFN5cy5EYXRlKCksICclQiAlZCwgJVknKWAiDQpvdXRwdXQ6DQogIHJtZGZvcm1hdHM6OnJlYWR0aGVkb3duOiAgICMgaHR0cHM6Ly9naXRodWIuY29tL2p1YmEvcm1kZm9ybWF0cw0KICAgIHNlbGZfY29udGFpbmVkOiB0cnVlDQogICAgdGh1bWJuYWlsczogdHJ1ZQ0KICAgIGxpZ2h0Ym94OiB0cnVlDQogICAgZ2FsbGVyeTogdHJ1ZQ0KICAgIG51bWJlcl9zZWN0aW9uczogdHJ1ZQ0KICAgIGxpYl9kaXI6IGxpYnMNCiAgICBkZl9wcmludDogInBhZ2VkIg0KICAgIGNvZGVfZm9sZGluZzogInNob3ciDQogICAgY29kZV9kb3dubG9hZDogeWVzDQogICAgY3NzOiAic3R5bGUvc3R5bGUgY3NzLmNzcyINCi0tLQ0KDQo8c3R5bGU+DQogIGJvZHkgew0KICAgIHRleHQtYWxpZ246IGp1c3RpZnk7DQogIH0NCjwvc3R5bGU+DQoNCjxpbWcgc3JjPSJOT1ZBLmpwZyIgYWx0PSJMb2dvIiBzdHlsZT0id2lkdGg6NTAwcHg7IGRpc3BsYXk6IGJsb2NrOyBtYXJnaW46IGF1dG87Ii8+DQoNCg0KDQojIFdlYiBTY3JhcGluZyBkaSBSIGRlbmdhbiBDaGF0R1BUDQoNClNlcmluZyBrYWxpLCBkYXRhIHlhbmcgaW5naW4ga2l0YSBhbmFsaXNpcyBzdWRhaCB0ZXJzZWRpYSBkYWxhbSBmb3JtYXQgc2VwZXJ0aSB0ZWtzLCBDU1YsIGF0YXUgZmlsZSBFeGNlbC4gTmFtdW4sIGRhbGFtIGJlYmVyYXBhIGthc3VzLCBkYXRhIGhhbnlhIHRlcnNlZGlhIGRpIGJlcmJhZ2FpIGhhbGFtYW4gc2l0dXMgd2ViLiBEYWxhbSBzaXR1YXNpIHNlcGVydGkgaW5pLCBraXRhIGJpc2EgbWVuZ2d1bmFrYW4gdGVrbmlrIHdlYiBzY3JhcGluZyB1bnR1ayBtZW5nYW1iaWwgZGF0YSB0ZXJzZWJ1dC4NCg0KRGFsYW0gcGFuZHVhbiBpbmksIGtpdGEgYWthbiBtZW1iYWhhcyBjYXJhIG1lbGFrdWthbiB3ZWIgc2NyYXBpbmcgZGkgUiBtZW5nZ3VuYWthbiBwYWtldCBgYGBydmVzdGBgYCwgZGVuZ2FuIGVtcGF0IGNvbnRvaCB5YW5nIGtvbXBsZWtzLg0KDQoNCiMgQ29udG9oIDE6IE1lbnlhbGluIERhdGEgVGFiZWwgc2VjYXJhIE1hbnVhbA0KDQpKaWthIHRhYmVsIHN1ZGFoIHRlcnNlZGlhIGRhbGFtIGJlbnR1ayB5YW5nIGRhcGF0IGRpc2FsaW4sIGtpdGEgYmlzYSBsYW5nc3VuZyBtZW55YWxpbm55YSBkYW4gbWVuZ2d1bmFrYW4gcGFrZXQgZGF0YXBhc3RhIHVudHVrIG1lbWFzdWtrYW5ueWEga2UgZGFsYW0gUi4NCg0KYGBge3IsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9DQojIEluc3RhbGFzaSBkYW4gcGVtYW5nZ2lsYW4gbGlicmFyeSBkYXRhcGFzdGENCmxpYnJhcnkoZGF0YXBhc3RhKSAjIE1lbWFuZ2dpbCBsaWJyYXJ5IHVudHVrIGRpZ3VuYWthbg0KDQojIE1lbWJ1YXQgZGF0YSBmcmFtZSBiZXJpc2kgcGVyaW5na2F0IG1lZGFsaSBPbGltcGlhZGUNCm9seW1waWNfbWVkYWxzIDwtIGRhdGEuZnJhbWUoDQogIFJhbmsgPSBjKDEsIDIsIDMpLA0KICBOYXRpb24gPSBjKCJVU0EiLCAiQ2hpbmEiLCAiSmFwYW4iKSwNCiAgR29sZCA9IGMoMzksIDM4LCAyNyksDQogIFNpbHZlciA9IGMoNDEsIDMyLCAxNCksDQogIEJyb256ZSA9IGMoMzMsIDE4LCAxNyksDQogIFRvdGFsID0gYygxMTMsIDg4LCA1OCkNCikNCg0KIyBNZW5hbXBpbGthbiBpc2kgZGF0YSBmcmFtZQ0KcHJpbnQob2x5bXBpY19tZWRhbHMpDQpgYGANCg0KIyBDb250b2ggMjogTWVuZ2d1bmFrYW4gYGBgcnZlc3RgYGAgdW50dWsgTWVuZ2FtYmlsIERhdGEgVGFiZWwgZGFyaSBXZWJzaXRlDQoNClVudHVrIHNjcmFwaW5nIGRhdGEgdGFiZWwgZGFyaSB3ZWJzaXRlLCBraXRhIGJpc2EgbWVuZ2d1bmFrYW4gcGFrZXQgYGBgcnZlc3RgYGAuDQoNCmBgYHtyLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQ0KIyBwZW1hbmdnaWxhbiBsaWJyYXJ5IHJ2ZXN0DQpsaWJyYXJ5KHJ2ZXN0KQ0KDQojIE1lbmVudHVrYW4gVVJMIGhhbGFtYW4geWFuZyBha2FuIGRpLXNjcmFwZQ0KdXJsIDwtICJodHRwczovL2NyYW4uci1wcm9qZWN0Lm9yZy93ZWIvcGFja2FnZXMvYXZhaWxhYmxlX3BhY2thZ2VzX2J5X25hbWUuaHRtbCINCg0KIyBNZW1iYWNhIGhhbGFtYW4gSFRNTCBkYXJpIFVSTA0Kd2VicGFnZSA8LSByZWFkX2h0bWwodXJsKQ0KDQojIE1lbmdhbWJpbCB0YWJlbCBwZXJ0YW1hIHlhbmcgZGl0ZW11a2FuIGRpIGhhbGFtYW4NCnBhY2thZ2VzX3RhYmxlIDwtIHdlYnBhZ2UgJT4lDQogIGh0bWxfbm9kZSgidGFibGUiKSAlPiUNCiAgaHRtbF90YWJsZSgpDQoNCiMgTWVuYW1waWxrYW4gYmViZXJhcGEgYmFyaXMgcGVydGFtYSBkYXJpIHRhYmVsIHlhbmcgdGVsYWggZGlhbWJpbA0KaGVhZChwYWNrYWdlc190YWJsZSkNCmBgYA0KDQojIENvbnRvaCAzOiBTY3JhcGluZyBEYXRhIGRhcmkgQmViZXJhcGEgSGFsYW1hbiBXZWINCg0KS2V0aWthIGRhdGEgdGVyc2ViYXIgZGkgYmViZXJhcGEgaGFsYW1hbiBkZW5nYW4gSUQgdGVydGVudHUsIGtpdGEgYmlzYSBtZW5nZ3VuYWthbiBsb29wIHVudHVrIG1lbmdhbWJpbCBkYXRhIGRhcmkgYmVyYmFnYWkgaGFsYW1hbiBzZWNhcmEgb3RvbWF0aXMuDQoNCmBgYHtyLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQ0KIyBNZW1hbmdnaWwgbGlicmFyeSB5YW5nIGRpYnV0dWhrYW4NCmxpYnJhcnkoZHBseXIpDQpsaWJyYXJ5KHJ2ZXN0KQ0KDQojIERhZnRhciBVUkwgZGFyaSBoYWxhbWFuIHdlYiB5YW5nIGFrYW4gZGktc2NyYXBlDQp1cmxzIDwtIGMoDQogICJodHRwczovL2ZicmVmLmNvbS9lbi9zcXVhZHMvNGE4MTdhYzgvR2VybWFueSIsDQogICJodHRwczovL2ZicmVmLmNvbS9lbi9zcXVhZHMvMjA2ZDkwZGIvU3BhaW4iLA0KICAiaHR0cHM6Ly9mYnJlZi5jb20vZW4vc3F1YWRzLzViYThjMzlkL0l0YWx5IiwNCiAgImh0dHBzOi8vZmJyZWYuY29tL2VuL3NxdWFkcy8xYzg5Njk1NS9GcmFuY2UiDQopDQoNCiMgTWVueWltcGFuIGhhc2lsIHNjcmFwaW5nIGRhbGFtIGxpc3QNCnNxdWFkX2RhdGEgPC0gbGlzdCgpDQoNCiMgTG9vcGluZyBtZWxhbHVpIHNldGlhcCBVUkwgdW50dWsgbWVuZ2FtYmlsIGRhdGEgdGFiZWwNCmZvciAoaSBpbiAxOmxlbmd0aCh1cmxzKSkgew0KICB0cnlDYXRjaCh7DQogICAgd2VicGFnZSA8LSByZWFkX2h0bWwodXJsc1tpXSkNCiAgICB0YWJsZSA8LSB3ZWJwYWdlICU+JSBodG1sX25vZGUoIiNzdGF0c19zdGFuZGFyZCIpICU+JSBodG1sX3RhYmxlKCkNCiAgICBzcXVhZF9kYXRhW1tpXV0gPC0gdGFibGUNCiAgfSwgZXJyb3IgPSBmdW5jdGlvbihlKSB7DQogICAgbWVzc2FnZSgiR2FnYWwgbWVuZ2FtYmlsIGRhdGEgZGFyaTogIiwgdXJsc1tpXSkNCiAgfSkNCn0NCg0KDQojIE1lbmdnYWJ1bmdrYW4gc2VtdWEgZGF0YSBkYXJpIGxpc3QgbWVuamFkaSBzYXR1IGRhdGEgZnJhbWUNCnRvdGFsX3NxdWFkX2RhdGEgPC0gYmluZF9yb3dzKHNxdWFkX2RhdGEpDQoNCiMgTWVuYW1waWxrYW4gYmViZXJhcGEgYmFyaXMgcGVydGFtYSBkYXJpIGRhdGEgeWFuZyBkaXBlcm9sZWgNCmhlYWQodG90YWxfc3F1YWRfZGF0YSkNCmBgYA0KDQoNCiMgQ29udG9oIDQ6IFNjcmFwaW5nIERhdGEgZGFyaSBFbGVtZW4gTm9uLVRhYmVsIGRlbmdhbiBDaGF0R1BUDQoNClRlcmthZGFuZywgZGF0YSB5YW5nIGtpdGEgYnV0dWhrYW4gdGlkYWsgYmVyYmVudHVrIHRhYmVsIHRldGFwaSB0ZXJzZW1idW55aSBkYWxhbSBiZXJiYWdhaSBlbGVtZW4gSFRNTC4gS2l0YSBiaXNhIG1lbmdndW5ha2FuIENoYXRHUFQgdW50dWsgbWVtYmFudHUgbWVuZ2lkZW50aWZpa2FzaSBlbGVtZW4geWFuZyBzZXN1YWkgZGFuIG1lbnVsaXMga29kZSBzY3JhcGluZy4NCg0KYGBge3IsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9DQojIFVSTCBkYXNhciBkZW5nYW4gcGFyYW1ldGVyIGhhbGFtYW4NCmJhc2VfdXJsIDwtICJodHRwczovL3d3dy5wYXRyZW9uLmNvbS9kaXNjb3Zlcj9wYWdlPSINCnBhZ2VzIDwtIDE6NSAjIEhhbGFtYW4geWFuZyBpbmdpbiBkaWFtYmlsDQoNCiMgTWVueWltcGFuIGhhc2lsIHNjcmFwaW5nIGRhbGFtIGxpc3QNCmRpc2NvdmVyeV9kYXRhIDwtIGxpc3QoKQ0KDQojIExvb3BpbmcgdW50dWsgbWVuZ2FtYmlsIGRhdGEgZGFyaSBiZWJlcmFwYSBoYWxhbWFuDQpmb3IgKHBhZ2UgaW4gcGFnZXMpIHsNCiAgdXJsIDwtIHBhc3RlMChiYXNlX3VybCwgcGFnZSkgIyBNZW5nZ2FidW5na2FuIFVSTCBkZW5nYW4gbm9tb3IgaGFsYW1hbg0KICB3ZWJwYWdlIDwtIHJlYWRfaHRtbCh1cmwpICMgTWVtYmFjYSBoYWxhbWFuIHdlYg0KICANCiAgIyBNZW5nYW1iaWwgZWxlbWVuIEhUTUwgYmVyZGFzYXJrYW4gY2xhc3MgdGVydGVudHUNCiAgdGl0bGVzIDwtIHdlYnBhZ2UgJT4lIGh0bWxfbm9kZXMoIi5zYy1qRUFDd0MuYklUTmVyIikgJT4lIGh0bWxfdGV4dCgpDQogIGRlc2NyaXB0aW9ucyA8LSB3ZWJwYWdlICU+JSBodG1sX25vZGVzKCIuc2MtZ0V2RWVyIikgJT4lIGh0bWxfdGV4dCgpDQogIG1lbWJlcnMgPC0gd2VicGFnZSAlPiUgaHRtbF9ub2RlcygiLnNjLWRzUURtViIpICU+JSBodG1sX3RleHQoKQ0KICANCiAgIyBNZW55aW1wYW4gZGF0YSBkYWxhbSBiZW50dWsgZGF0YSBmcmFtZQ0KICBkaXNjb3ZlcnlfZGF0YVtbcGFnZV1dIDwtIGRhdGEuZnJhbWUodGl0bGVzLCBkZXNjcmlwdGlvbnMsIG1lbWJlcnMpDQp9DQoNCiMgTWVuZ2dhYnVuZ2thbiBzZW11YSBkYXRhIGRhcmkgbGlzdCBtZW5qYWRpIHNhdHUgZGF0YSBmcmFtZQ0KZmluYWxfZGlzY292ZXJ5X2RhdGEgPC0gYmluZF9yb3dzKGRpc2NvdmVyeV9kYXRhKQ0KDQojIE1lbmFtcGlsa2FuIGJlYmVyYXBhIGJhcmlzIHBlcnRhbWEgZGFyaSBkYXRhIHlhbmcgZGlwZXJvbGVoDQpoZWFkKGZpbmFsX2Rpc2NvdmVyeV9kYXRhKQ0KYGBgDQoNCiMgS2VzaW1wdWxhbg0KDQpXZWIgc2NyYXBpbmcgZGkgUiBkYXBhdCBkaWxha3VrYW4gZGVuZ2FuIGJlcmJhZ2FpIGNhcmEsIGRhcmkgbWV0b2RlIG1hbnVhbCBoaW5nZ2Egb3RvbWF0aXNhc2kgbWVuZ2d1bmFrYW4gYGBgcnZlc3RgYGAuIERlbmdhbiBiYW50dWFuIENoYXRHUFQsIGtpdGEgYmlzYSBsZWJpaCBtdWRhaCBtZW1haGFtaSBzdHJ1a3R1ciBoYWxhbWFuIHdlYiBkYW4gbWVudWxpcyBrb2RlIHNjcmFwaW5nIHlhbmcgbGViaWggZWZla3RpZi4gTmFtdW4sIHBlcmx1IGRpaW5nYXQgYmFod2EgYmFueWFrIHNpdHVzIHdlYiBtZW1pbGlraSBhdHVyYW4ga2V0YXQgdGVya2FpdCBzY3JhcGluZywgamFkaSBndW5ha2FuIHRla25payBpbmkgZGVuZ2FuIGJpamFrIGFnYXIgdGlkYWsgdGVya2VuYSBwZW1ibG9raXJhbi4=