Ketika Anda perlu melakukan web scraping, Anda biasanya akan menggunakan paket rvest dari Hadley Wickham. Paket ini menyediakan solusi siap pakai yang mudah digunakan untuk mengambil kode html yang menghasilkan sebuah halaman web. Namun, ketika situs atau halaman web menggunakan JavaScript untuk menampilkan data yang Anda minati, paket rvest tidak memiliki fungsionalitas yang diperlukan. Salah satu solusinya adalah menggunakan PhantomJS.
(Ingin berlatih mengimpor lebih banyak data ke R? Coba tutorial ini.)
Muat Paket yang Diperlukan
Sebagai langkah pertama, Anda harus memuat semua paket yang kita perlukan untuk analisis ini ke dalam workspace (jika Anda belum memasang paket-paket ini di sistem lokal, gunakan install.packages() untuk membuatnya tersedia):
library(rvest)
library(stringr)
library(plyr)
library(dplyr)
library(ggvis)
library(knitr)
options(digits =4)Didukung oleh
Web Scraping Data yang Dihasilkan Javascript dengan R
Langkah berikutnya adalah mengumpulkan data TechStars menggunakan PhantomJS. Lihat berkas .js dasar berikut:
// scrape_techstars.js
var webPage = require('webpage');
var page = webPage.create();
var fs = require('fs');
var path ='techstars.html'
page.open('http://www.techstars.com/companies/stats/',function(status){
var content = page.content;
fs.write(path,content,'w')
phantom.exit();});Didukung oleh
Skrip ini pada dasarnya merender halaman HTML setelah kode javascript di baliknya selesai bekerja, memungkinkan Anda mengambil halaman HTML, lengkap dengan semua tabel di dalamnya. Agar tetap berada di R untuk sisa analisis ini, kami sarankan Anda menggunakan fungsi system() untuk memanggil PhantomJS (Anda harus mengunduh dan memasang PhantomJS dan meletakkannya di working directory Anda):
# Biarkan phantomJS melakukan scraping techstars, keluaran ditulis ke techstars.html
system("./phantomjs scrape_techstars.js")Didukung oleh
Setelah penyimpangan kecil ini, akhirnya Anda memiliki sebuah berkas HTML, techstars.html, di sistem lokal kami, yang dapat di-scrape dengan rvest. Pemeriksaan halaman web Techstars menunjukkan bahwa tabel yang kita minati berada di dalam div dengan kelas css batch:
batches <- html("techstars.html")%>%
html_nodes(".batch")
class(batches)Didukung oleh
Sekarang Anda memiliki daftar objek XMLNodeSet: setiap objek berisi data untuk satu batch TechStars. Di dalamnya, kita dapat menemukan informasi mengenai lokasi batch, tahun, musim, serta tentang perusahaan, kantor pusat saat ini, status saat ini, dan total pendanaan yang mereka raih. Kami tidak akan masuk ke detail langkah-langkah pengumpulan dan pembersihan data di bawah; Anda dapat mengeksekusi kodenya sendiri dan meninjau apa yang dicapai. Anda akan melihat ada pembersihan kustom untuk memastikan setiap potongan informasi diformat dengan rapi:
batch_titles <- batches %>%
html_nodes(".batch_class")%>%
html_text()
batch_season <- str_extract(batch_titles,"(Fall|Spring|Winter|Summer)")
batch_year <- str_extract(batch_titles,"([[:digit:]]{4})")# location info is everything in the batch title that is not year info or season info
batch_location <- sub("\\s+$","",
sub("([[:digit:]]{4})","",
sub("(Fall|Spring|Winter|Summer)","",batch_titles)))# create data frame with batch info.
batch_info <- data.frame(location = batch_location,
year = batch_year,
season = batch_season)
breakdown <- lapply(batches,function(x){
company_info <- x %>% html_nodes(".parent")
companies_single_batch <- lapply(company_info,function(y){
as.list(gsub("\\[\\+\\]\\[\\-\\]\\s","", y %>%
html_nodes("td")%>%
html_text()))})
df <- data.frame(matrix(unlist(companies_single_batch),
nrow=length(companies_single_batch),
byrow=T,
dimnames = list(NULL, c("company","funding","status","hq"))))
return(df)})# Add batch info to breakdown
batch_info_extended <- batch_info[rep(seq_len(nrow(batch_info)),
sapply(breakdown, nrow)),]
breakdown_merged <- rbind.fill(breakdown)# Merge all information
techstars <- tbl_df(cbind(breakdown_merged, batch_info_extended))%>%
mutate(funding = as.numeric(gsub(",","",gsub("\\$","",funding))))Didukung oleh
Dengan kombinasi fungsi R inti, rvest, plyr, dan dplyr, kini kita memiliki data frame techstars; sebuah set data semua perusahaan TechStars, dengan semua informasi yang tersedia untuk umum dan telah diformat dengan rapi:
Menggunakan kombinasi alat dan kode di atas, kita berhasil melakukan scraping data dari situs web yang menggunakan JavaScript untuk menghasilkan datanya. Seperti yang dapat dilihat, ini adalah proses yang sangat terstruktur dan dapat dilakukan dengan mudah setelah kode awal tersedia. Ingin belajar R, dan mencari tutorial serta kursus data science dan R? Lihat DataCamp
Temukan alasan mengapa Anda sebaiknya (tidak) menggunakan spaghetti plot untuk menyampaikan ketidakpastian jalur prediksi badai serta dampaknya terhadap interpretasi.
Kuasai pertanyaan wawancara basis data, dari konsep SQL dasar hingga skenario desain sistem tingkat lanjut. Panduan mendalam ini mencakup semua yang Anda perlukan untuk sukses di wawancara DBMS dan meraih peran berikutnya.
Ketika Anda perlu melakukan web scraping, Anda biasanya akan menggunakan paket
rvestdari Hadley Wickham. Paket ini menyediakan solusi siap pakai yang mudah digunakan untuk mengambil kode html yang menghasilkan sebuah halaman web. Namun, ketika situs atau halaman web menggunakan JavaScript untuk menampilkan data yang Anda minati, paketrvesttidak memiliki fungsionalitas yang diperlukan. Salah satu solusinya adalah menggunakan PhantomJS.(Ingin berlatih mengimpor lebih banyak data ke R? Coba tutorial ini.)
Muat Paket yang Diperlukan
Sebagai langkah pertama, Anda harus memuat semua paket yang kita perlukan untuk analisis ini ke dalam workspace (jika Anda belum memasang paket-paket ini di sistem lokal, gunakan
install.packages()untuk membuatnya tersedia):Web Scraping Data yang Dihasilkan Javascript dengan R
Langkah berikutnya adalah mengumpulkan data TechStars menggunakan PhantomJS. Lihat berkas .js dasar berikut:
Skrip ini pada dasarnya merender halaman HTML setelah kode javascript di baliknya selesai bekerja, memungkinkan Anda mengambil halaman HTML, lengkap dengan semua tabel di dalamnya. Agar tetap berada di R untuk sisa analisis ini, kami sarankan Anda menggunakan fungsi
system()untuk memanggil PhantomJS (Anda harus mengunduh dan memasang PhantomJS dan meletakkannya di working directory Anda):Setelah penyimpangan kecil ini, akhirnya Anda memiliki sebuah berkas HTML,
techstars.html, di sistem lokal kami, yang dapat di-scrape denganrvest. Pemeriksaan halaman web Techstars menunjukkan bahwa tabel yang kita minati berada di dalam div dengan kelas cssbatch:Sekarang Anda memiliki daftar objek
XMLNodeSet: setiap objek berisi data untuk satu batch TechStars. Di dalamnya, kita dapat menemukan informasi mengenai lokasi batch, tahun, musim, serta tentang perusahaan, kantor pusat saat ini, status saat ini, dan total pendanaan yang mereka raih. Kami tidak akan masuk ke detail langkah-langkah pengumpulan dan pembersihan data di bawah; Anda dapat mengeksekusi kodenya sendiri dan meninjau apa yang dicapai. Anda akan melihat ada pembersihan kustom untuk memastikan setiap potongan informasi diformat dengan rapi:Dengan kombinasi fungsi R inti,
rvest,plyr, dandplyr, kini kita memiliki data frametechstars; sebuah set data semua perusahaan TechStars, dengan semua informasi yang tersedia untuk umum dan telah diformat dengan rapi:Kesimpulan
Menggunakan kombinasi alat dan kode di atas, kita berhasil melakukan scraping data dari situs web yang menggunakan JavaScript untuk menghasilkan datanya. Seperti yang dapat dilihat, ini adalah proses yang sangat terstruktur dan dapat dilakukan dengan mudah setelah kode awal tersedia. Ingin belajar R, dan mencari tutorial serta kursus data science dan R? Lihat DataCamp