Tutorial: Github Action untuk Melakukan Web Scrape Otomatis dengan R
Semenjak saya bermigrasi untuk blogging menggunakan Github Pages pada saat pandemi, saya hanya memanfaatkan Github ala kadarnya, yakni murni hanya sebagai repository penyimpan data yang bisa terintegrasi dengan R Studio secara flawlessly.
Pada saat kuliah S2 tahun lalu, saya akhirnya mencoba salah satu fitur lain Github yakni Codespaces. Sampai sekarang, saya selalu menggunakan Codespaces untuk melakukan berbagai macam pekerjaan komputasi dan menulis blog ini.
Belakangan ini, saya menggunakan Codespaces untuk melakukan tugas web scrape kerjaan kantor. Alasannya sederhana:
Saya ingin proses web scrape tidak mengganggu pekerjaan lain yang saya kerjakan di laptop karena saya sedang tidak bisa menyewa VPS di Digital Ocean.
Maklum, lagi tidak ada budget. Hehe.
Setelah seminggu pemakaian, saya sangat puas dengan langkah kerja yang saya lakukan ini:
- Membuka Codespaces dari iPad,
- Klik run pada skrip web scrape yang sudah saya buat sebelumnya. Tampilannya adalah Visual Studio Code ya, bukan R Studio.
- Proses web scrape kemudian berjalan selama 20-30 menit karena informasi yang saya ambil cukup banyak. Pada proses ini, saya bisa meninggalkan iPad dan melakukan pekerjaan lainnya.
- Setelah selesai, saya hanya perlu melakukan commit dan push kembali ke Github repository.
- Selesai.
Langkah-langkah ini selalu saya ulang berkala setiap harinya pada waktu dan jam yang sama.
Walaupun pekerjaan itu sudah semi otomatis, saya masih penasaran apakah bisa dibuat lebih otomatis lagi?
Ternyata jawabannya: BISA! Saya bisa memanfaatkan fitur lain Github
bernama Github Action. Layaknya Codespaces, fitur Action juga
dibatasi per user 2.000
menit selama sebulan. Bagaimana kalau mau
lebih? Cukup bayar saja sebesar $0.008 per minute.
Sekarang bagaimana caranya? Yuk simak berikut caranya:
Langkah I: Siapkan Repository
Sebagai contoh, saya akan buat satu repo bernama
detik-headline-scraper
. Repo ini akan bekerja untuk mengambil
headline berita di detik.com
secara otomatis.
Langkah II: Buat Skrip Web Scrape dengan R
Berikutnya saya akan buat skrip web scrape sederhana di R. Saya menggunakan dua libraries saja, yakni:
dplyr
rvest
Berikut skripnya:
# hapus environment
rm(list=ls())
# libraries
library(dplyr)
library(rvest)
# url awal
url = "https://www.detik.com/"
# ambil headline
headliner =
url %>%
read_html() %>%
html_nodes(".media__link") %>%
html_text(trim = T)
# buat nama file
nama_file = Sys.time() %>% as.character()
nama_file = paste0(nama_file,".csv")
# save headliner
write.csv(headliner,nama_file)
Saya akan simpan skrip tersebut ke dalam repo tersebut dengan nama
scrape.R
.
Langkah III: Buat Skrip Workflow di Repository
Sekarang bagian paling serunya! yakni membuat skrip Github Action.
Langkah awalnya adalah dengan membuat file berekstensi .yaml
pada
folder: .github
>> workflows
. Sebagai contoh, saya berikan nama
file-nya: schedule-commit.yaml
Mari kita buat skripnya:
Bagian III-1
Kita berikan nama Github Action-nya terlebih dahulu. Misalkan:
# Name of the workflow
name: scrape-detik
Bagian III-2
Github Action bisa berjalan setidaknya dengan dua metode:
- Triggered, yakni setelah repo terpancing aktivitas tertentu.
- Scheduled, yakni terjadwal sesuai definisi.
Pada kasus kali ini, saya akan buat Github Action berjalan saat saya melakukan push ke repo. Berikut skripnya:
on:
push:
branches: main
Seandainya saya ingin Github Action berjalan pada jadwal tertentu (misalkan setiap 5 menit), berikut skripnya:
on:
schedule:
- cron: "*/5 * * * *"
Kita cukup mengubah isian cron-nya saja. Bagaimana cara mengisinya, bisa dilihat di situs crontab.guru.
Bagian III-3
Sekarang kita akan definisikan apa yang harus dilakukan oleh Github Action. Misalkan:
# Jobs - What the computer should do?
jobs:
import-data:
# kita buat github action berjalan di ubuntu versi terbaru
runs-on: ubuntu-latest
steps:
# langkah pertama install R
- name: Set up R
uses: r-lib/actions/setup-r@v2
# langkah kedua kita update dan install library di ubuntu
- run: |
sudo apt-get update
# khusus rvest di R, dibutuhkan libraries ubuntu sebagai berikut:
sudo apt-get install libcurl4-openssl-dev
# berikutnya adalah install libraries yang dibutuhkan di R
- name: Install packages
uses: r-lib/actions/setup-r-dependencies@v2
with:
packages: |
any::dplyr
any::rvest
# set working directory
- name: Check out repository
uses: actions/checkout@v3
# kita buat github action menjalankan skrip scrape.R
- name: Run skrip R
run: Rscript -e 'source("scrape.R")'
# berikutnya kita akan commit dan push ke repo
- name: Commit results
run: |
git config --local user.email "isi sesuai akun@xxx.com"
git config --local user.name "isi sesuai akun"
git add .
git commit -m 'Data updated' || echo "No changes to commit"
git push || echo "No changes to commit"
# jangan lupa set permission dulu ya
Hasil akhirnya jadi seperti ini:
Langkah IV: Aktifkan Read and Write di Repository Setting
Langkah terakhir adalah kita perlu memperbolehkan Github Action untuk
melakukan commit dan push ke repo. Caranya: Buka tab setting
di repo >> pilih Actions
>> pilih General
>> pilih
Read and write permissions
pada Workflow permissions
>> klik
save.
Selesai!
Repo dengan Github Action sudah bisa digunakan. Untuk kasus saya,
saya perlu men-trigger repo tersebut dengan melakukan push.
Setelah itu, kita bisa lihat di tab Actions
proses akan berjalan.
Untuk kasus saya, butuh 4 menitan untuk bisa selesai.
Seandainya terjadi error, maka akan ada pesan error pada bagian detail status. Kita cukup melihat apa pesan error yang harus kita resolve.
Setelah selesai, maka headline hasil scrape akan muncul di repo sebagai berikut:
Berikut isi file csv
-nya:
Bagaimana? Mudah kan?
if you find this article helpful, support this blog by clicking the ads.