Web Scraping dengan R

Hanifah Khairunisa
9 min readNov 24, 2020

--

Contoh Sederhana Mengambil Data dari Web dengan “rvest”

Assalamualaikum warahmatullahi wabarokatuh, sobat data..

Kali ini mengambil Data dari Web IMDb dengan “rvest”

Disini data dari IMDb (Internet Movie Database, https://www.imdb.com ) untuk melihat apakah ada pola perubahan yang menonton flm pada rentang waktu 2015 sampai 2019 sehingga bisa dijadikan motivasi untuk perusahaan-perusahaan flm selanjutnya…

jika kita ingin melihat daftar popularitas film-film pada tahun 2018, bisa dilihat melalui tautan ini

Siapkan terlebih dahulu R nya serta install package yang diperlukan

install.packages(“xml2”)
library(xml2)
install.packages(“rvest”)
library(rvest)

nampak seperti berikut,

dan instalasi package “rvest”

kemudian kita lihat alamat dari halaman website yang kita inginkan di IMDb untuk tahun 2015,

masukkan dalam R seperti berikut,

alamatweb <- ‘https://www.imdb.com/search/title/?count=100&release_date=2015,2015&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 download aplikasi “SelectorGadget” an ditempelkan dalam Chrome untuk mengetahui posisi dimana letak runtime dalam halaman html

Sehingga terlihat ikon kecil dikanan 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,

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 91 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(3,23,51,66,73,76,85,92,97)){

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)

}
# 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 berikut adalah,

ggplot(kumpulan_data_film,aes(x=Runtime,y=Gross_Pendapatan))+
geom_point(aes(size=Rating,col=Genre))

Selanjutnyakita lihat alamat dari halaman website IMDb untuk tahun 2016,

nampak hasilnya sebagai berikut,

berikutnya,

berikutnya,

berikutnya,

berikutnya,

berikutnya,

berikutya,

berikutnya,

berikutnya,

kemudian,

kemudian akan kita buat beberapa visualisasi yang penting,

hasilnya sebagai berikut,

dan visualisasi data berikutnya adalah,

Selanjutnya kita lihat alamat dari halaman website IMDb untuk tahun 2017,

hasilnya sebagai berikut,

Selanjutnya kita lihat alamat dari halaman website IMDb untuk tahun 2017,

hasilnya sebagai berikut,

Selanjutnya kita lihat alamat dari halaman website IMDb untuk tahun 2017,

hasilnya sebagai berikut,

berikutnya,

berikutnya,

berikutnya,

berikutnya,

berikutnya,

berikutnya,

berikutnya,

berikutnya,

berikutnya,

berikutnya,

kemudian,

kemudian akan kita buat beberapa visualisasi yang penting,

hasilnya sebagai berikut,

dan visualisasi data berikutnya adalah

Selanjutnya kita lihat alamat dari halaman website IMDb untuk tahun 2018,

hasilnya sebagai berikut,

berikutnya,

berikutnya,

berikutnya,

berikutnya,

berikutnya,

berikutnya,

berikutnya,

berikutnya,

berikutnya,

berikutnya,

kemudian,

kemudian akan kita buat beberapa visualisasi yang penting,

hasilnya sebagai berikut,

dan visualisasi data berikutnya adalah

kemudian data padan tahun 2019,

hasilnya,

berikutnya,

berikutnya,

berikutnya,

berikutnya,

berikutnya,

berikutnya,

berikutnya,

berikutnya,

berikutnya,

berikutnya,

kemudian,

kemudian akan kita buat beberapa visualisasi yang penting,

hasilnya sebagai berikut,

dan visualisasi data berikutnya adalah

Maka dari semua output dari tahun 2015–2019 sudah tampilkan di atas, untuk selanjutnya kita akan melihat pola perubahan masyarakat yang menonton film. Rentang waktu ini masyarakat lebih menyukai genre action sehingga berdasarkan rating rating didapatkan genre film action selalu meningkat atau setiap tahunnya sangat tinggi.

Sehingga dapat dijadikan pedoman oleh pada perusahaan-perusahaan pembuat film untuk menentukan genre apa yang cocok untuk tahun berikutnya. Pada tahun 2015 sampai 2020 masyarakat banyak menyukai genre film action. Jadi perusahan film untuk tahun berikutnya dapat membuat flm dengan genre action. Karena banyak di sukai masyarakat genre flm action tersebut menghasilkan gross pendapatan tertinggi

--

--

No responses yet