Web scraping dengan R |
Jumpa lagi teman-teman di blog sederhana ini. Kita sebelumnya telah membahas hal-hal yang serius dan mungkin menegangkan. Kali ini kita akan break sejenak dengan meneruskan pembahasan mengenai web scraping. Kita akan membahas web scraping dulu sebelum web crawling. Semoga ke depan kita dapat mengulas web crawling.
Di era data besar atau diistilahkan Big Data, kita dihadapkan pada kumpulan data yang sebenarnya sangat dekat dengan keseharian kita. Ketika kita berangkat kerja, sekolah, atau kuliah, di sepanjang jalan kita pastinya menyaksikan sejumlah unit kendaraan yang berlalu-lintas. Kalau kita mau sedikit "kurang kerjaan" setiap menit coba kita hitung berapa jumlah kendaraan yang melintas setiap harinya. Dalam setahun, itu akan menjadi sebuah data yang berukuran besar, memiliki kecepatan yang tinggi, bahkan dinamis. Contoh lain,jumlah data posisi lintang dan bujur kita selama beraktivitas, baik di dalam rumah maupun di luar rumah selama 5 tahun. Setiap detik bahkan bisa jadi kita peroleh data yang begitu dinamis, bergerak cepat dan dalam ukuran yang besar bila kita juga menyatukan data posisi lintang bujur untuk seluruh penduduk di Indonesia misalkan.
Tidak kita sadari pula, berapa jumlah kata dan kalimat yang telah kita baca dari website ke website selama 5 tahun terakhir. Inilah wujud nyata dari Big Data yang akan kita coba ulas dalam konteks web scraping kali ini menggunakan R.
Web scraping sebenarnya merupakan salah satu aktivitas hacking yang telah dikenal dalam dunia cyber. Tujuan dari aktivitas ini adalah mendapatkan sejumlah atau sebagian informasi atau variabel tertentu yang belum terstruktur dari sebuah obyek berupa website, blog, atau media sosial menjadi sebuah data yang terstruktur dan siap dioleh lebih lanjut menjadi sebuah informasi bermanfaat atau memiliki insight.
Legalitas dari aktivitas web scraping ini sebenarnya masih debatable, karena web scraping bisa jadi bermakna positif bila kita melakukannya dalam rangka menguji keamanan data dalam website tertentu, atau dalam rangka memperoleh data-data yang bersifat public atau agregat. Sebaliknya pula, web scraping juga bisa dimaknai sebagai aktivitas yang negatif bila dalam pelaksanaannya bertujuan untuk melakukan hijacking yang intinya mengambil alih website untuk kemudian mengacak-acak isinya atau dalam rangka mencuri data pribadi kemudian melakukan perusakan terhadap website.
Secara umum, sebelum melakukan web scraping, ada baiknya kita melakukan pengecekan sekaligus "permisi" terhadap sebuah website, misalkan dengan menggunakan fungsi *robots.txt. Sebab, dengan melakukan akses url website ditambah dengan /robots.txt kita akan mampu melihat apakah sejumlah data atau obyek di dalam halaman sebuah website boleh kita scrape atau tidak.
Baik, kali ini kita akan mencoba melakukan web scraping dengan menggunakan salah satu package di R khusus untuk web scraping, yaitu rvest. Dengan rvest ini, R dapat mengekstrak sejumlah obyek berbahasa Hypertext Markup Language (HTML), XML, atau XHTML. Dengan mengekstraks sejumlah obyek itu, kita akan memperoleh sejumlah raw data untuk kemudian distrukturisasi menjadi sebuah data yang lebih tertata menggunakan package stringr.
Laman website yang akan kita scrape kali ini adalah quotes.toscrape.com dengan perwajahan sebagai berikut:
Situs quote.toscrape yang menjadi target web scraping |
Kita akan melakukan web scraping di Chrome sehingga kita harus menyiapkan Addons dari Chrome yaitu SelectorGadget terlebih dahulu. Caranya adalah dengan mencari Addons SelectorGadget di google kemudian klik Add to Chrome sebagaimana tampilan berikut:
Tahap 1 instalasi Addons Chrome: SelectorGadget |
Setelah itu kita klik Add extension untuk menambagkan fungsi (Addons) pada search engine Chrome kita ketika muncul box berikut:
Aktivasi Addons SelectorGadget |
Untuk memastikan Addons SelectorGadget telah terpasang pada Chrome, kita dapat melihatnya dengan mengklik jendela Puzzle pada pojok kanan atas. Ketika telah muncul menu SelectorGadget, maka sudah dipastikan bahwa Addons tersebut telah terpasang.
Bukti Addons SelectorGadget telah aktif |
Sebelum melakukan web scraping, kita klik terlebih dulu SelectorGadget dengan cara klik sekali menu tersebut sehingga muncul note, SelectorGadget Has access to this site seperti tampilan berikut:
Mengaktifkan SelectorGadget pada website |
Setelah itu kita coba sorot beberapa obyek pada halaman website quotes.toscrape.com. Bila muncul semacam hover atau tanda-tanda kota warna kuning atau hijau, maka kita telah siap melakukan ekstraks terhadap obyek atau nodes yang terkandung di dalam website. Tampilannya sebagaimana gambar berikut:
Tanda bahwa SelectorGadget siap digunakan, muncul hover setiap cursor digerakkan pada obyek website |
Untuk men-scrape teks quotes pada website tersebut, kita cukup menyorot obyek yang mengandung teks sedemikian rupa sehingga muncul warna kuning seperti stabilo. Kemudian pada kota di bagian bawah terdapat scripts ".text" inilah wujud kode ekstraksi atau kode scrape yang bisa kita terapkan menggunakan R.
Memperoleh code dari nodes teks quote |
Sedangkan untuk melakukan scrape nama penulis atau pencetus dari quote kita cukup dengan menyorot dan klik bagian "by (nama author)" dan muncul kode nodes ".author" sebagaimana tampilan berikut:
Memperoleh code dari nodes author |
Adapun code secara lengkap bagi teman-teman yang pengin praktikum web scraping dengan R adalah sebagai berikut:
#Install dan aktivasi package
install.packages("rvest")
install.packages("xml2")
install.packages("stringr")
library(rvest)
library(xml2)
library(stringr)
#Mendeklarasikan alamat atau URL website/situs
#Membaca code HTML website
url <- 'http://quotes.toscrape.com/'
laman <- read_html(url)
list(laman)
## [[1]]
## {html_document}
## <html lang="en">
## [1] <head>\n<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">\n<meta charset="UTF-8">\n<title>Quote ...
## [2] <body>\n <div class="container">\n <div class="row header-box">\n <div class="col-md-8">\n ...
#Men-scrape quote
quote <- laman %>% html_nodes('.text')
quote
## {xml_nodeset (10)}
## [1] <span class="text" itemprop="text">“The world as we have created it is a process of our thinking. It cannot be c ...
## [2] <span class="text" itemprop="text">“It is our choices, Harry, that show what we truly are, far more than our abi ...
## [3] <span class="text" itemprop="text">“There are only two ways to live your life. One is as though nothing is a mir ...
## [4] <span class="text" itemprop="text">“The person, be it gentleman or lady, who has not pleasure in a good novel, m ...
## [5] <span class="text" itemprop="text">“Imperfection is beauty, madness is genius and it's better to be absolutely r ...
## [6] <span class="text" itemprop="text">“Try not to become a man of success. Rather become a man of value.”</span>
## [7] <span class="text" itemprop="text">“It is better to be hated for what you are than to be loved for what you are ...
## [8] <span class="text" itemprop="text">“I have not failed. I've just found 10,000 ways that won't work.”</span>
## [9] <span class="text" itemprop="text">“A woman is like a tea bag; you never know how strong it is until it's in hot ...
## [10] <span class="text" itemprop="text">“A day without sunshine is like, you know, night.”</span>
#Mengekstrak teksnya saja
quote <- laman %>% html_nodes('.text') %>% html_text()
quote
## [1] "“The world as we have created it is a process of our thinking. It cannot be changed without changing our thinking.”"
## [2] "“It is our choices, Harry, that show what we truly are, far more than our abilities.”"
## [3] "“There are only two ways to live your life. One is as though nothing is a miracle. The other is as though everything is a miracle.”"
## [4] "“The person, be it gentleman or lady, who has not pleasure in a good novel, must be intolerably stupid.”"
## [5] "“Imperfection is beauty, madness is genius and it's better to be absolutely ridiculous than absolutely boring.”"
## [6] "“Try not to become a man of success. Rather become a man of value.”"
## [7] "“It is better to be hated for what you are than to be loved for what you are not.”"
## [8] "“I have not failed. I've just found 10,000 ways that won't work.”"
## [9] "“A woman is like a tea bag; you never know how strong it is until it's in hot water.”"
## [10] "“A day without sunshine is like, you know, night.”"
#Men-scrape penulis quote
author <- laman %>% html_nodes('.author')
author
## {xml_nodeset (10)}
## [1] <small class="author" itemprop="author">Albert Einstein</small>
## [2] <small class="author" itemprop="author">J.K. Rowling</small>
## [3] <small class="author" itemprop="author">Albert Einstein</small>
## [4] <small class="author" itemprop="author">Jane Austen</small>
## [5] <small class="author" itemprop="author">Marilyn Monroe</small>
## [6] <small class="author" itemprop="author">Albert Einstein</small>
## [7] <small class="author" itemprop="author">André Gide</small>
## [8] <small class="author" itemprop="author">Thomas A. Edison</small>
## [9] <small class="author" itemprop="author">Eleanor Roosevelt</small>
## [10] <small class="author" itemprop="author">Steve Martin</small>
#Mengekstrak teks authornya saja
author <- laman %>% html_nodes('.author') %>% html_text()
author
## [1] "Albert Einstein" "J.K. Rowling" "Albert Einstein" "Jane Austen" "Marilyn Monroe"
## [6] "Albert Einstein" "André Gide" "Thomas A. Edison" "Eleanor Roosevelt" "Steve Martin"
#Membuat data frame
quoteku <- data.frame(author, quote)
kable(quoteku)
author | quote |
---|---|
Albert Einstein | “The world as we have created it is a process of our thinking. It cannot be changed without changing our thinking.” |
J.K. Rowling | “It is our choices, Harry, that show what we truly are, far more than our abilities.” |
Albert Einstein | “There are only two ways to live your life. One is as though nothing is a miracle. The other is as though everything is a miracle.” |
Jane Austen | “The person, be it gentleman or lady, who has not pleasure in a good novel, must be intolerably stupid.” |
Marilyn Monroe | “Imperfection is beauty, madness is genius and it's better to be absolutely ridiculous than absolutely boring.” |
Albert Einstein | “Try not to become a man of success. Rather become a man of value.” |
André Gide | “It is better to be hated for what you are than to be loved for what you are not.” |
Thomas A. Edison | “I have not failed. I've just found 10,000 ways that won't work.” |
Eleanor Roosevelt | “A woman is like a tea bag; you never know how strong it is until it's in hot water.” |
Steve Martin | “A day without sunshine is like, you know, night.” |
Untuk mempelajari teknik web scraping menggunakan R, kebetulan saya telah menyediakan sebuah buku khusus bagi teman-teman yang berminat memperdalam web scraping dengan R. Pemesanan buku dapat melalui tautan berikut atau teman-teman bisa praktik web scraping-nya dengan menyimak video berikut. Adapun sekadar tanya-tanya perihal buku-buku dengan menggunakan R bisa melalui kolom komentar yang tersedia di blog ini. Demikian sedikit sharing kita bagaimana melakukan web scraping dengan R. Selamat memahami dan mempraktikkan!