Scraping Data dari Web Menggunakan R

Ghaitsa Zahira Shafa
5 min readNov 16, 2020

--

Assalamualaikum..

Hello, Data Enthusisast!

Pada tulisan pertamaku ini, aku akan mencoba berbagi sedikit ilmuku tentang gimana sih caranya scrapping data???. Kali ini aku akan mengambil data dari IMDb (Internet Movie Database). Di sini aku akan mencari tahu film apa saja yang disukai oleh penonton selama tahun 2015–2020 dan membuat grafik visualisasinya. Lets check it out..

Pertama, tuliskan dulu syntax untuk install package yang diperlukan

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

Setelah terinstall, masukkan syntax untuk memanggil alamat website yang kita inginkan di IMDb (Di sini aku ambil contoh web IMDb tahun 2015). Klik link berikut.

> alamatweb1 <- 'https://www.imdb.com/search/title/?count=100&release_date=2015,2015&title_type=feature'
> lamanweb1 <- read_html(alamatweb1)
> lamanweb1

Selanjutnya, kita akan mengambil data genre

Untuk mengambil data tersebut, download extension SelectorGadget dan tempelkan pada Chrome. Jika SelectorGadget telah terpasang, kembali ke web IMDd dan klik bagian genre seperti gambar berikut.

.genre akan digunakan di syntax R

Tuliskan perintah pada R untuk melakukan scrapping data genre seperti berikut

> genre_data_laman1 <- html_nodes(lamanweb1,'.genre')
> genre_data_laman1

Berikut adalah hasilnya

Selanjutnya, bersihkan terlebih dahulu data tersebut dan buatlah menjadi data bertipe faktor.

#ambil data text genre
> genre_data1 <- html_text(genre_data_laman1)
> genre_data1
#karena masih banyak memuat tanda "\n" maka kita hilangkan terlebih dahulu
> genre_data1<-gsub("\n","",genre_data1)
# kita hilangkan juga spasi kosong
> genre_data1<-gsub(" ","",genre_data1)
# karena satu film bisa beberapa genre, maka setiap film hanya dikategorikan pada deskripsi genre yang pertama saja
> genre_data1<-gsub(",.*","",genre_data1)
> genre_data1
# mengkonversi data genre berupa text menjadi faktor
> genre_data1<-as.factor(genre_data1)
> genre_data1

Maka hasilnya akan menjadi seperti ini

Ulangi langkah-langkah di atas untuk mengambil dan membersihkan data pada rating dan gross seperti berikut

#RATING
> rating_data_laman1 <- html_nodes(lamanweb1,'.ratings-imdb-rating strong')
> rating_data_laman1
# mengambil data text rating
> rating_data1 <- html_text(rating_data_laman1)
> rating_data1
# dikonversi dalam numerik
> rating_data1<-as.numeric(rating_data1)
> rating_data1
#GROSS
> gross_data_laman1 <- html_nodes(lamanweb1,'.ghost~ .text-muted+ span')
> gross_data1 <- html_text(gross_data_laman1)
> gross_data1
# menghilangkan huruf M dan $
> gross_data1<-gsub("M","",gross_data1)
> gross_data1<-substring(gross_data1,2,6)
> gross_data1
# cek jumlah data gross_data, karena tidak semua film memuat gross data

Sehingga diperoleh hasil untuk rating seperti ini

Sedangkan untuk gross seperti ini

Kemudian mengecek jumlah data yang memuat gross pendapatan

Dari gambar di atas, dapat dilihat bahwa terdapat 88 film yang memuat nilai gtoss pendapatan. Langkah selanjutnya adalah buka kembali web IMDb, kemudian periksa secara manual film nomor berapa yang tidak memuat nilai gross dan tulis syntax seperti di bawah ini(urutan popularitas film dapat update setiap saat)

# Missing data diganti dengan nilai NA
> for (i in c(3,14,35,47,49,63,68,72,76,85,94,95))
{
a<-gross_data1[1:(i-1)]

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

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

gross_data1<-append(gross_data1,b)
}
# data gross dikonversi menjadi numerik
> gross_data1<-as.numeric(gross_data1)
> summary(gross_data1)

Kemudian kumpulkan semua variabel sebagai data frame

> kumpulan_data_film1=data.frame(Genre=genre_data1,
Rating=rating_data1,
Gross_pendapatan=gross_data1)
> str(kumpulan_data_film1)

Akan muncul hasilnya seperti ini..

Setelah itu, visualisasikan hasilnya

> library('ggplot2')
> ggplot(kumpulan_data_film1,aes(x=Genre,y=Gross_pendapatan))+
geom_point(aes(size=Rating,col=Genre))

Yeayyy.. udah selesai nihh. Gampang kan?? Kalian bisa latihan sendiri untuk yang tahun 2016–2020 dengan cara yang sama. Sekarang, aku mau menampilkan hasil summary dan visualisasi setiap tahunnya.

Summary Tahun 2015

Summary Tahun 2016

Summary Tahun 2017

Summary Tahun 2018

Summary 2019

Summary 2020

Kemudian untuk visualisasi datanya

Visualisasi Tahun 2015
Visualisasi Tahun 2016
Visualisasi Tahun 2017
Visualisasi Tahun 2018
Visualisasi Tahun 2019
Visualisasi Tahun 2020

Naaahh… Setelah sudah jadi semua, bisa dilihat kan bahwa rata- rata penonton di tahun 2015–2018 menyukai film Genre Action, kemudian pada tahun 2019–2020 terjadi perubahan trend yang menggambarkan bahwa rata-rata penonton menyukai film Genre Adventure, Animasi, dan Drama. Jadi….saranku untuk para produser film, kedepannya agar lebih banyak memproduksi film dengan keempat genre tersebut.

Baiklah, itu tadi sedikit ilmu yang aku ketahui dalam melakukan scraping data beserta visualisasinya. Semoga bermanfaat guys, see you!

Wassalamualaikum..

Referensi:

--

--