Web Scraping dengan R-Studio

Melakukan web scraping dengan menggunakan program R-Studio untuk mengetahui informasi dari sebuah Website dan Visualisasi Data secara Sederhana.

DINING DWI SUCI RIYANI
9 min readNov 17, 2020

Assalammualaikum wr.wb

Haloooo Data Enthusiast…

Web scraping dapat didefinisikan sebagai proses pengambilan data dari sebuah website. Pada kesempatan kali ini, kita akan mencoba melakukan web scraping dengan mengambil data dari IMDb (Internet Movie Database, https://www.imdb.com ) yang disusun berdasar popularitas film di tahun 2015 hingga 2020.

Untuk melihat film-film berdasarkan popularitas berdasarkan tahun dapat menggunakan tautan seperti berikut dengan mengubah tahun sesuai dengan tahun film yang ingin di scraping.

https://www.imdb.com/search/title/?count=100&release_date=2015,2015&title_type=feature

Data berdasarkan popularitas tahun 2015 dapat dilihat pada tautan ini.

Data berdasarkan popularitas tahun 2016 dapat dilihat pada tautan ini.

Data berdasarkan popularitas tahun 2017 dapat dilihat pada tautan ini.

Data berdasarkan popularitas tahun 2018 dapat dilihat pada tautan ini.

Data berdasarkan popularitas tahun 2019 dapat dilihat pada tautan ini.

Data berdasarkan popularitas tahun 2020 dapat dilihat pada tautan ini.

Maka akan menghasilkan tampilan web seperti pada gambar dibawah ini.

Kemudian, berdasarkan pada data pada website diatas kita ingin melihat data tentang gross (pendapatan kotor) dan genre untuk film-film yang diurutkan berdasarkan popularitas pada tahun 2015–2020.

Pertama-tama langkah yang harus dilakukan yaitu penginstallan package yang di perlukan, jika sudah ada package tersebut maka hanya perlu diaktifkan

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

Menampilkan Data dari Alamat Web kedalam R-Studio untuk Film Tahun 2015–2020

Untuk menampilkan 100 data teratas berdasarkan pada alamat web untuk popularitas film pada tahun 2015 dapat dengan menggunakan perintah seperti dibawah ini.

#Masukan Alamat Web
alamatweb <- 'https://www.imdb.com/search/title/?count=100&release_date=2015,2015&title_type=feature'
lamanweb <- read_html(alamatweb)
lamanweb

maka akan menghasilkan output seperti berikut.

Lalu ulangi perintah diatas untuk menampilkan data berdasarkan pada alamat web untuk popularitas film pada tahun 2016, 2017, 2018, 2019, dan 2020.

#2016####
#Masukan Alamat Web
alamatweb1 <- 'https://www.imdb.com/search/title/?count=100&release_date=2016,2016&title_type=feature'
lamanweb1 <- read_html(alamatweb1)
lamanweb1
#2017####
#Masukan Alamat Web
alamatweb2 <- 'https://www.imdb.com/search/title/?count=100&release_date=2017,2017&title_type=feature'
lamanweb2 <- read_html(alamatweb2)
lamanweb2
#2018####
#Masukan Alamat Web
alamatweb3 <- ‘https://www.imdb.com/search/title/?count=100&release_date=2018,2018&title_type=feature'
lamanweb3 <- read_html(alamatweb3)
lamanweb3
#2019####
#Masukan Alamat Web
alamatweb4 <- 'https://www.imdb.com/search/title/?count=100&release_date=2019,2019&title_type=feature'
lamanweb4 <- read_html(alamatweb4)
lamanweb4

#2020####
#Masukan Alamat Web
alamatweb5 <- 'https://www.imdb.com/search/title/?count=100&release_date=2020,2020&title_type=feature'
lamanweb5 <- read_html(alamatweb5)
lamanweb5

Mencari Nilai Rata-Rata Gross Pendapatan Film 2015–2020

Untuk mencari nilai rata-rata gross pendapatan untuk film diatas pada tahun 2015, terlebih dahulu menampilkan data genre tersebut dengan menggunakan perintah berikut.

gross_data_laman <- html_nodes(lamanweb,'.ghost~ .text-muted+ span')
gross_data <- html_text(gross_data_laman)
gross_data

Kemudian akan muncul output seperti berikut.

Karena pada output diatas masih terdapat $ dan M, maka untuk menghilangkan $ dan M tersebut dapat dengan menggunakan perintah sebagai berikut.

#menghilangkan huruf M dan $
gross_data<-gsub("M","",gross_data)
gross_data<-substring(gross_data,2,6)
gross_data

Kemudian akan menghasilkan output sebagai berikut.

Kemudian melakukan pengecekan panjang data gross pendapatan tersebut dengan menggunakan perintah.

# cek jumlah data gross_data, karena tidak semua film memuat gross 
# data
length(gross_data)

Dari perintah diatas dapat diketahui panjang data seperti pada output berikut.

Lalu data gross pendapatan diatas diubah menjadi data numerik dengan menggunakan perintah sebagai berikut.

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

Kemudian akan menghasilkan output seperti berikut.

Untuk mencari rata-rata dari data gross pendapatan diatas dapat dengan menggunakan perintah sebagai berikut.

Rata2015<-mean(gross_data)
Rata2015

atau

summary(gross_data)

yang akan menghasilkan output seperti berikut.

Lalu ulangi perintah diatas untuk mencari nilai rata-rata gross pendapatan untuk film pada tahun 2016, 2017, 2018, 2019, dan 2020 seperti berikut.

#2016###
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
length(gross_data1)
# data gross dikonversi menjadi numerik
gross_data1<-as.numeric(gross_data1)
Rata2016<-mean(gross_data1)
Rata2016
summary(gross_data1)
#2017###
gross_data_laman2 <- html_nodes(lamanweb2,'.ghost~ .text-muted+ span')
gross_data2 <- html_text(gross_data_laman2)
gross_data2
#menghilangkan huruf M dan $
gross_data2<-gsub("M","",gross_data2)
gross_data2<-substring(gross_data2,2,6)
gross_data2
# cek jumlah data gross_data, karena tidak semua film memuat gross data
length(gross_data1)
# data gross dikonversi menjadi numerik
gross_data2<-as.numeric(gross_data2)
length(gross_data2)
summary(gross_data2)
Rata2017<-mean(gross_data2)
Rata2017
#2018###
gross_data_laman3 <- html_nodes(lamanweb3,'.ghost~ .text-muted+ span')
gross_data3 <- html_text(gross_data_laman3)
gross_data3
#menghilangkan huruf M dan $
gross_data3<-gsub("M","",gross_data3)
gross_data3<-substring(gross_data3,2,6)
gross_data3
# cek jumlah data gross_data, karena tidak semua film memuat gross data
length(gross_data1)
# data gross dikonversi menjadi numerik
gross_data3<-as.numeric(gross_data3)
length(gross_data3)
summary(gross_data3)
Rata2018<-mean(gross_data3)
Rata2018
#2019###
gross_data_laman4 <- html_nodes(lamanweb4,'.ghost~ .text-muted+ span')
gross_data4 <- html_text(gross_data_laman4)
gross_data4
#menghilangkan huruf M dan $
gross_data4<-gsub("M","",gross_data4)
gross_data4<-substring(gross_data4,2,6)
gross_data4
# cek jumlah data gross_data, karena tidak semua film memuat gross data
length(gross_data1)
# data gross dikonversi menjadi numerik
gross_data4<-as.numeric(gross_data4)
length(gross_data4)
summary(gross_data4)
Rata2019<- mean(gross_data4)
Rata2019
#2020###
gross_data_laman5 <- html_nodes(lamanweb5,'.ghost~ .text-muted+ span')
gross_data5 <- html_text(gross_data_laman5)
gross_data5
#menghilangkan huruf M dan $
gross_data5<-gsub("M","",gross_data5)
gross_data5<-substring(gross_data5,2,6)
gross_data5
# cek jumlah data gross_data, karena tidak semua film memuat gross data
length(gross_data1)
# data gross dikonversi menjadi numerik
gross_data5<-as.numeric(gross_data5)
length(gross_data5)
summary(gross_data5)
Rata2020<-mean(gross_data5)
Rata2020

Visualisasi Rata-Rata Pendapatan Kotor Film Tahun 2015–2020

Untuk menampilkan data rata-rata hasil pendapatan kotor dari film terlebih dahulu mendefinisikan rata-rata dan tahun dari data yang sudah didapatkan diatas dengan perintah sebagai berikut.

tahun<-c(2015,2016,2017,2018,2019,2020)
tahun
Rata_Rata<-c(Rata2015,Rata2016,Rata2017,Rata2018,Rata2019,Rata2020)
Rata_Rata
dataframe_gross <- data.frame ( Gross_Pendapatan = Rata_Rata,
Tahun=tahun)

Lalu akan menghasilkan output sebagai berikut

Kemudian untuk membuat visualisasi dari data yang sudah didapat diatas dapat terlebih dahulu menginstall package seperti berikut.

install.package(ggplot2)
library('ggplot2')

Kemudian membuat visualisasi dengan menggunakan plot garis dengan perintah seperti berikut.

ggplot(data=dataframe_gross, aes(x=tahun, y=Rata_Rata, group=1)) +
geom_line(size=2,color="red")+geom_point(size=3,colour="Black")+
labs(title="Rata-Rata Pendapatan Kotor Film 2015-2020",x="Tahun", y = "Rata-Rata")

Akan menghasilkan output seperti dibawah.

Dari ouput diatas dapat diketahui bahwa rata-rata pendapatan kotor film dengan popularitas, didapatkan bahwa rata-rata pendapatan kotor tertinggi terjadi pada tahun 2019, dan pendapatan kotor terendah ada pada tahun 2016 dan mengalami data mengalami fluktuasi kenaikan yang signifikan pada 2018–2019, dan penurunan yang signifikan pada tahun 2019–2020.

Menampilkan Data Genre dari Film Populer tahun 2015–2020

Kemudian untuk menampilkan data genre film kedalam program R-Studio digunakan perintah sebagai berikut.

genre_data_laman <- html_nodes(lamanweb,'.genre')
genre_data_laman

kemudian kita mengambil data text dari data genre tersebut dengan perintah berikut.

#kita ambil data text genre
genre_data <- html_text(genre_data_laman)

lalu untuk melihat data text genre tersebut dapat dengan menggunakan perintah berikut.

#kemudian kita lihat data tersebut
genre_data

Maka akan didapatkan output dibawah ini.

Karena data genre diatas belum rapih,maka untuk merapihkan data tersebut dapat menggunakan perintah berikut.

#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

yang akan menghasilkan output seperti berikut.

Kemudian kita mengkonfersi data genre yang masih berupa text menjadi data faktor dan menampilkan kembali data tersebut dengan menggunakan perintah seperti berikut.

#mengkonversi data genre berupa text menjadi faktor
genre_data<-as.factor(genre_data)
#kita lihat lagi hasilnya,
head(genre_data)

yang kemudian akan menghasilkan output seperti berikut.

Lalu ulangi perintah diatas untuk mencari nilai rata-rata gross pendapatan untuk film pada tahun 2016, 2017, 2018, 2019, dan 2020 seperti berikut..

#2016##
genre_data_laman1 <- html_nodes(lamanweb1,'.genre')
genre_data_laman1
#kita ambil data text genre
genre_data1 <- html_text(genre_data_laman1)
#kemudian kita lihat data tersebut
genre_data
#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)
#kita lihat lagi hasilnya,
head(genre_data1)
#2017##
genre_data_laman2 <- html_nodes(lamanweb2,'.genre')
genre_data_laman2
#kita ambil data text genre
genre_data2 <- html_text(genre_data_laman2)
#kemudian kita lihat data tersebut
genre_data2
#karena masih banyak memuat tanda "\n" maka kita hilangkan terlebih # dahulu
genre_data2<-gsub("\n","",genre_data2)
#kita hilangkan juga spasi kosong
genre_data2<-gsub(" ","",genre_data2)
#karena satu film bisa beberapa genre, maka setiap film hanya
#dikategorikan pada deskripsi genre yang pertama saja
genre_data2<-gsub(",.*","",genre_data2)
genre_data2
#mengkonversi data genre berupa text menjadi faktor
genre_data2<-as.factor(genre_data2)
#kita lihat lagi hasilnya,
head(genre_data2)
#2018##
genre_data_laman3 <- html_nodes(lamanweb3,'.genre')
genre_data_laman3
#kita ambil data text genre
genre_data3 <- html_text(genre_data_laman3)
#kemudian kita lihat data tersebut
genre_data3
#karena masih banyak memuat tanda "\n" maka kita hilangkan terlebih #dahulu
genre_data3<-gsub("\n","",genre_data3)
#kita hilangkan juga spasi kosong
genre_data3<-gsub(" ","",genre_data3)
#karena satu film bisa beberapa genre, maka setiap film hanya
#dikategorikan pada deskripsi genre yang pertama saja
genre_data3<-gsub(",.*","",genre_data3)
genre_data3
#mengkonversi data genre berupa text menjadi faktor
genre_data3<-as.factor(genre_data3)
#kita lihat lagi hasilnya,
head(genre_data3)
#2019##
genre_data_laman4 <- html_nodes(lamanweb4,'.genre')
genre_data_laman4
#kita ambil data text genre
genre_data4 <- html_text(genre_data_laman4)
#kemudian kita lihat data tersebut
genre_data4
#karena masih banyak memuat tanda "\n" maka kita hilangkan terlebih # dahulu
genre_data4<-gsub("\n","",genre_data4)
#kita hilangkan juga spasi kosong
genre_data4<-gsub(" ","",genre_data4)
#karena satu film bisa beberapa genre, maka setiap film hanya
#dikategorikan pada deskripsi genre yang pertama saja
genre_data4<-gsub(",.*","",genre_data4)
genre_data4
#mengkonversi data genre berupa text menjadi faktor
genre_data4<-as.factor(genre_data4)
#kita lihat lagi hasilnya,
head(genre_data4)
#2020##
genre_data_laman5 <- html_nodes(lamanweb5,'.genre')
genre_data_laman5
#kita ambil data text genre
genre_data5 <- html_text(genre_data_laman5)
#kemudian kita lihat data tersebut
genre_data5
#karena masih banyak memuat tanda "\n" maka kita hilangkan terlebih # dahulu
genre_data5<-gsub("\n","",genre_data5)
#kita hilangkan juga spasi kosong
genre_data5<-gsub(" ","",genre_data5)
#karena satu film bisa beberapa genre, maka setiap film hanya
#dikategorikan pada deskripsi genre yang pertama saja
genre_data5<-gsub(",.*","",genre_data5)
genre_data5
#mengkonversi data genre berupa text menjadi faktor
genre_data5<-as.factor(genre_data5)
#kita lihat lagi hasilnya,
head(genre_data5)

Visualisasi perubahan trend genre kesukaan masyarakat terhadap film di tahun 2015–2020

Untuk mengetahui perubahan trend genre kesukaan masyarakat terhadap film di tahun 2015–2020 dapat dengan menggunakan bar plot dan dibandingkan untuk hasil tiap tahunnya dengan perintah berikut.

#2015#
qplot(genre_data,fill = genre_data)+labs(title="Genre Film Tahun 2015",x="Genre", y = "Jumlah")
#2016#
qplot(genre_data1,fill = genre_data1)+labs(title="Genre Film Tahun 2016",x="Genre", y = "Jumlah")
#2017#
qplot(genre_data2,fill = genre_data2)+labs(title="Genre Film Tahun 2017",x="Genre", y = "Jumlah")
#2018#
qplot(genre_data3,fill = genre_data3)+labs(title="Genre Film Tahun 2018",x="Genre", y = "Jumlah")
#2019#
qplot(genre_data4,fill = genre_data4)+labs(title="Genre Film Tahun 2019",x="Genre", y = "Jumlah")
#2020#
qplot(genre_data5,fill = genre_data5)+labs(title="Genre Film Tahun 2020",x="Genre", y = "Jumlah")

yang kemudian menghasilkan output seperti dibawah ini.

Berdasarkan plot diatas dapat diketahui bahwa perubahan trend genre kesukaan masyarakat terhadap film untuk genre action stabil untuk 6 tahun berturut-turut, memiliki jumlah penonton paling banyak dan hanya memiliki sedikit penurunan, sedangkan untuk genre adventure mengalami penurunan pada tahun 2017 dan 2020. Kemudian untuk genre drama mengalami penurunan pada tahun 2018, genree horor memiliki memiliki penonton terbanyak pada tahun 2016 yang kemudian turun secara signifikan pada tahun 2017–2019. Kemudian genre yang paling sedikit di minati oleh masyarakat yaitu genre family.

Berdasarkan data diatas dapat diketahui jika misalnya ada seorang produser yang ingin membuat produksi film maka lebih disarankan untuk memilih genre action karena perubahan trend genre kesukaan masyarakat terhadap film untuk genre action stabil untuk 6 tahun berturut-turut dan hanya memiliki sedikit penurunan, maka untuk tahun selanjutnya memiliki kemungkinan bahwa jumlah penonton untuk genre action masih stabil.

Terimakasih atas perhatiannya, mohon maaf bila ada kesalahan kata.
Semoga bermanfaat:)

Wassalamualaikum wr.wb

--

--

DINING DWI SUCI RIYANI

Fresh graduate of Bachelor of Statistics at the Islamic University of Indonesia. Have interest as data analyst, data scientist and business intelligence.