Anda di halaman 1dari 19

Contoh Sederhana Mengambil Data dari Web dengan “rvest”

Kali ini kita akan mencoba mengambil data dari IMDb (Internet
Movie Database, https://www.imdb.com ) yang disusun berdasar
popularitas film di tahun 2019 dan kemudian menyajikan hasil
analisis dalam bentuk tabel,

jika kita ingin melihat daftar popularitas film-film pada tahun


2019, bisa dilihat melalui tautan ini
kemudian kita ingin melihat data antara gross (pendapatan kotor)
dengan runtime dan genrenya.

Siapkan terlebih dahulu R nya serta install package yang


diperlukan
> install.packages("xml2")
> library(xml2)
> install.packages("rvest")
> library(rvest)

seperti berikut,

dan instalasi package “rvest”

kemudian kita lihat alamat dari halaman website yang kita


inginkan di IMDb,
masukkan dalam R seperti berikut,
> alamatweb <- '
https://www.imdb.com/search/title/?count=100&release_date=2019,2019
&title_type=feature'
> lamanweb <- read_html(alamatweb)
> lamanweb

nampak hasilnya seperti berikut,

kemudian kita ingin mengambil data Runtime film yang ada


dalam halaman web,
maka untuk mengetahui posisi dimana letak runtime dalam
halaman html maka kita perlu menggunakan aplikasi
“SelectorGadget” yang bisa langsung di download dan
ditempelkan dalam Chrome,
kemudian tinggal ditambahkan dalam chrome, sehingga terlihat
ikon kecil kanan atas pada halaman chrome bahwa
“SelectorGadget” telah terpasang,

kemudian klik ikon tersebut sehingga muncul jendela kecil satu


baris yang berisi letak bagian yang akan kita incar.
sehingga, perintah dalam R yang kita jalankan adalah seperti
berikut,

> runtime_data_laman <- html_nodes(lamanweb,'.runtime')


> runtime_data_laman
> runtime_data <- html_text(runtime_data_laman)
> head(runtime_data)

nampak seperti berikut,


kemudian, kita bersihkan terlebih dahulu data tersebut, dan
kemudian membuatnya menjadi bertipe numerik
> runtime_data <- gsub(" min","",runtime_data)
> runtime_data
> runtime_data<-as.numeric(runtime_data)
> runtime_data
nampak seperti berikut,

Apabila ingin menyimpan dalam bentuk csv


> write.csv(runtime_data,"./dummy.csv", row.names=FALSE)#lalu cari data
di dokumen
dari halaman website tersebut kita telah berhasil mendapatkan
data runtime untuk 100 film popular. Jadi kurang lebih langkah-
langkah tersebut yang akan kita gunakan untuk mengambil data-
data berikutnya dari halaman website tersebut
> genre_data_laman <- html_nodes(lamanweb,'.genre')
> genre_data_laman # kita ambil data text genre
> genre_data <- html_text(genre_data_laman)# kemudian kita lihat
data tersebut
> genre_data # karena masih banyak memuat tanda "\n" maka
kita hilangkan terlebih # dahulu
> genre_data<-gsub("\n","",genre_data)# kita hilangkan juga spasi
kosong
> genre_data<-gsub(" ","",genre_data)# karena satu film bisa
beberapa genre, maka setiap film hanya
# dikategorikan pada deskripsi genre yang pertama saja
> genre_data<-gsub(",.*","",genre_data)
> genre_data # mengkonversi data genre berupa text menjadi faktor
> genre_data<-as.factor(genre_data)# kita lihat lagi hasilnya,
> head(genre_data)

seperti berikut,

kemudian,
berikutnya,
berikutnya,

terlihat,
sehingga data genre sudah kita dapatkan,

Berikutnya untuk data rating seperti berikut,


> rating_data_laman <- html_nodes(lamanweb,'.ratings-imdb-rating
strong')
> rating_data_laman# mengambil data text rating
> rating_data <- html_text(rating_data_laman)
> rating_data# dikonversi dalam numerik
> rating_data<-as.numeric(rating_data)
> rating_data

nampak seperti berikut,


berikutnya,

kemudian,
kemudian akan diambil data gross dari film-film popular tersebut,
> gross_data_laman <- html_nodes(lamanweb,'.ghost~ .text-muted+
span')> gross_data <- html_text(gross_data_laman)
> gross_data# menghilangkan huruf M dan $
> gross_data<-gsub("M","",gross_data)
> gross_data<-substring(gross_data,2,6)
> gross_data# cek jumlah data gross_data, karena tidak semua film
memuat gross
# data
> length(gross_data)

nampak seperti berikut,

kemudian,

kemudian,
ternyata hanya 81 film yang memuat nilai gross pendapatannya,

kita coba kembali ke halaman web nya dan memeriksa nomer


berapa sajakah yang tidak ada nilai gross nya (perlu diingat bahwa
popularitas film bergerak terus, sehingga bisa jadi urutan film
ketika materi ini dibuat akan berbeda dengan ketika anda
mencoba saat ini)

kemudian nilai-nilai yang kosong itu di rekap secara manual dan


diganti dengan nilai “NA” dengan menggunakan perintah berikut,
> # Missing data diganti dengan nilai NA
> for (i in
c(2,9,12,25,29,31,47,48,50,56,57,62,70,75,80,86,87,93,94)){

a<-gross_data[1:(i-1)]

b<-gross_data[i:length(gross_data)]

gross_data<-append(a,list("NA"))

gross_data<-append(gross_data,b)

}
>

seperti berikut,

kemudian dijalankan perintah berikut,


> # data gross dikonversi menjadi numerik
> gross_data<-as.numeric(gross_data)
> length(gross_data)
> summary(gross_data)

nampak hasilnya seperti berikut,


kemudian, data kita kumpulkan sebagai data frame
> kumpulan_data_film <-data.frame(Runtime = runtime_data,
Genre = genre_data, Rating = rating_data,
Gross_Pendapatan = gross_data)>
str(kumpulan_data_film)

hasilnya,

kemudian akan kita buat beberapa visualisasi yang penting,


> library('ggplot2')> qplot(data = kumpulan_data_film,Runtime,fill
= Genre,bins = 30)

nampak hasilnya adalah seperti berikut,

,
dan visualisasi data berikutnya adalah,
> ggplot(kumpulan_data_film,aes(x=Runtime,y=Gross_Pendapatan))+
geom_point(aes(size=Rating,col=Genre))

hasilnya adalah seperti berikut,


sehingga nampak bahwa film dengan Genre Action mendapatkan
Gross tinggi dan Rating yang tinggi, sementara film dengan Genre
drama kebanyakan mendapatkan Gross rendah. Visualisasi data
yang lain masih dapat ditampilkan.

Sekian dulu materi kali ini, semoga bermanfaat

Referensi Utama:

1. “Beginner’s Guide on Web Scraping in R (using rvest) with


hands-on example”, Saurav Kaushik, Analytics Vidhya (2017)

Anda mungkin juga menyukai