Web Scraping Programmer Jobs With R and rvest

Background

Pendahuluan

Berdasarkan laporan The Future of Jobs dari World Economic Forum, terdapat sejumlah profesi yang paling dibutuhkan di masa depan, khususnya profesi yang melibatkan ilmu sains dan teknologi. Beberapa profesi yang paling menjanjikan yaitu Software Developer, Web/Mobile App Developer, dan profesi yang berkaitan dengan dunia IT.

Tidak bisa dipungkiri di era digital saat ini, hampir semua perusahaan membutuhkan sistem komputerisasi untuk memajukan setiap unit bisnis mereka. Maka tidak heran profesi di dunia IT semakin dicari dan dibutuhkan. Namun apakah jumlah kebutuhan sumber daya manusia (SDM) untuk profesi ini di Indonesia sudah merata pada masing-masing daerah? serta skill pemrograman apa saja yang paling banyak dibutuhkan perusahaan? Untuk menjawab pertanyaan tersebut dilakukan riset dengan cara web scraping pada salah satu situs pencari kerja yaitu Indeed. Riset dilakukan pada bulan Mei 2019 dengan pencarian kata kunci “programmer” dan menghasilkan sebanyak 387 hasil pencarian.

Script Scraping

library(tidyverse)
library(rvest)
library(xml2)

url <- "https://id.indeed.com/lowongan-kerja?q=programmer&l="
page <- xml2::read_html(url)
#get the job title
job_title <- page %>% 
    rvest::html_nodes("div") %>%
    rvest::html_nodes(xpath = '//*[@data-tn-element = "jobTitle"]') %>%
    rvest::html_attr("title")
#get job title using CSS
page %>% 
  rvest::html_nodes('[data-tn-element="jobTitle"]') %>%
  rvest::html_attr("title")
 
# or
page %>% 
  rvest::html_nodes('a[data-tn-element="jobTitle"]') %>%
  rvest::html_attr("title")

# get company location
page %>% 
    rvest::html_nodes("span") %>% 
    rvest::html_nodes(xpath = '//*[@class="location"]')%>% 
    rvest::html_text() %>%
    stringi::stri_trim_both()

# get company name
page %>% 
    rvest::html_nodes("span")  %>% 
    rvest::html_nodes(xpath = '//*[@class="company"]')  %>% 
    rvest::html_text() %>%
    stringi::stri_trim_both()

#using CSS
# get company location
page %>% 
    rvest::html_nodes("span") %>% 
    rvest::html_nodes(xpath = '//*[@class="location"]')%>% 
    rvest::html_text() %>%
    stringi::stri_trim_both()

# get company name
page %>% 
    rvest::html_nodes("span")  %>% 
    rvest::html_nodes(xpath = '//*[@class="company"]')  %>% 
    rvest::html_text() %>%
    stringi::stri_trim_both()

# get links xpath
page %>% 
  rvest::html_nodes("div") %>%
  rvest::html_nodes(xpath = '//*[@data-tn-element="jobTitle"]') %>%
  rvest::html_attr("href")

# get links CSS selectors
page %>% 
  rvest::html_nodes('[data-tn-element="jobTitle"]') %>%
  rvest::html_attr("href")

# get job description xpath
page %>%
  rvest::html_nodes("div")  %>% 
  rvest::html_nodes(xpath = '//*[@class="jobsearch-jobDescriptionText"]') %>% 
  rvest::html_text() %>%
  stringi::stri_trim_both()

page_result_start <- 10 # starting page 
page_result_end <- 1510 # last page results
page_results <- seq(from = page_result_start, to = page_result_end, by = 10)

full_df <- data.frame()
for(i in seq_along(page_results)) {
  
  first_page_url <- "https://id.indeed.com/lowongan-kerja?q=programmer&l="
  url <- paste0(first_page_url, "&start=", page_results[i])
  page <- xml2::read_html(url)
  # Sys.sleep pauses R for two seconds before it resumes
  # Putting it there avoids error messages such as "Error in open.connection(con, "rb") : Timeout was reached"
  Sys.sleep(2)
  
  #get the job title
  job_title <- page %>% 
    rvest::html_nodes("div") %>%
    rvest::html_nodes(xpath = '//a[@data-tn-element = "jobTitle"]') %>%
    rvest::html_attr("title")
  
  #get the company name
  company_name <- page %>% 
    rvest::html_nodes("span")  %>% 
    rvest::html_nodes(xpath = '//*[@class="company"]')  %>% 
    rvest::html_text() %>%
    stringi::stri_trim_both() -> company.name 
  
  
  #get job location
  job_location <- page %>% 
    rvest::html_nodes("span") %>% 
    rvest::html_nodes(xpath = '//*[@class="location"]')%>% 
    rvest::html_text() %>%
    stringi::stri_trim_both()
  
  # get links
  links <- page %>% 
    rvest::html_nodes("div") %>%
    rvest::html_nodes(xpath = '//*[@data-tn-element="jobTitle"]') %>%
    rvest::html_attr("href")
  
  job_description <- c()
  for(i in seq_along(links)) {
    
    url <- paste0("https://id.indeed.com/", links[i])
    page <- xml2::read_html(url)
    
    job_description[[i]] <- page %>%
      rvest::html_nodes("div")  %>% 
      rvest::html_nodes(xpath = '//*[@class="jobsearch-JobComponent-description icl-u-xs-mt--md"]') %>% 
      rvest::html_text() %>%
      stringi::stri_trim_both()
  }
  df <- data.frame(job_title, company_name, job_location, job_description)
  full_df <- rbind(full_df, df)
}

Deskripsi Data

Wordcloud

## <<SimpleCorpus>>
## Metadata:  corpus specific: 1, document level (indexed): 0
## Content:  documents: 6
## Warning in tm_map.SimpleCorpus(twitclean, removeWords, c("and")):
## transformation drops documents

Grafik

Most in-Demand Programming Skill

Programmer Job Vacancy based on Location

## <<SimpleCorpus>>
## Metadata:  corpus specific: 1, document level (indexed): 0
## Content:  documents: 6

Jakarta

Tangerang

## <<SimpleCorpus>>
## Metadata:  corpus specific: 1, document level (indexed): 0
## Content:  documents: 6

Surabaya

## <<SimpleCorpus>>
## Metadata:  corpus specific: 1, document level (indexed): 0
## Content:  documents: 6

Bandung

## <<SimpleCorpus>>
## Metadata:  corpus specific: 1, document level (indexed): 0
## Content:  documents: 6

Yogyakarta

Peta

Ringkasan

  • Berdasarkan lowongan pekerjaan programmer yang dimuat pada web Indeed diketahui bahwa 66% diantaranya berada di Jakarta. Hal ini tidak mengherankan karena Jakarta merupakan pusat industri dan ekonomi di wilayah Indonesia. Sementara itu apabila dilihat dari peta maka dapat terlihat ketimpangan lowongan pekerjaan antara pulau Jawa dengan pulau lainnya. Hal ini juga mengindikasikan adanya ketimpangan industri dan ekonomi yang masih kurang merata pada masing-masing daerah.
  • Kebutuhan pekerjaan programmer paling banyak ditemukan pada lima wilayah berikut secara berurutan yaitu: Jakarta,Surabaya, Bandung, Tangerang, Yogyakarta.
  • Secara umum dapat dilihat pada output wordcloud dan grafik bahwa skill pemrograman yang paling banyak dicari oleh perusahaan di Indonesia yaitu : SQL, HTML, php, javascript, dan CSS

Ellysa Lutfiana

27/5/2019