Github Action으로 스크래핑 자동화하기

Github에서 제공하는 Action 기능을 통해 데이터 스크래핑 및 적재를 자동화합니다.


이번 글은 깃허브에서 무료로 사용할 수 있는 액션이라는 기능을 사용하여 데이터 적재를 자동화하는 과정을 공유하고자 한다.

Github Action

깃허브 액션은 모든 레파지토리에서 사용할 수 있다. 보통은 레파지토리의 상단 바에서 Actions이라는 카테고리를 찾을 수 있다. 만약 Actions이 없다면 Settings > Action > General > 'Disable Actions' 선택되어 있는지 확인하고 'Allow all actions and reusable workflows'로 변경해주면 아래 사진처럼 보일 것이다.

action bar

액션 카테고리로 들어로면 워크플로우를 생성하는 첫 페이지가 보일 것이다. 깃허브에서는 장고, 패키지 생성, 파이린트 등 상황에 따라서 사용할 수 있는 여러 워크플로우 템플릿을 제공한다.

action

이번에는 템플릿 사용 없이 직접 워크플로우를 생성할 것이기에 'set up a workflow yourself'을 선택한다. 그럼 설명과 같이 yaml 파일을 작성하는 페이지가 나온다.

action page

이제 여기에 코드를 알맞게 입력하고 commit 입력하면 작업(Job)이 생성된다.

Workflow 작성

이번에 작성할 워크플로우의 조건은 아래와 같다.

  • 하루에 한번 작동하기
  • 데이터를 가져와서 DB서버에 Insert하기
  • 작업 실패 시 수동으로 재시도 가능하게 하기

위 조건을 바탕으로 워크플로우를 작성하려고 한다. 먼저 액션에서 사용되는 yaml 파일의 레이아웃은 아래와 같다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# 워크플로우 이름 설정
name: 여기에 작성한 이름이 액션 작업의 이름이 된다.

# 워크플로우가 작동되는 조건 설정
on:
# 자동으로 언제 작동하는지 설정
schedule:
# 수동으로 워크플로우를 작동할 수 있도록 설정
workflow_dispatch:

# 워크플로우에서 작업할 내용들 설정
jobs:
# 작업이 진행될 환경 설정
build-linux:
# 작업 내용 설정
steps:

위 레이아웃을 기준으로 필요한 작업들을 하나씩 작성해보자.

schedule

먼저 매일 특정 시간에 작업이 실행되도록 설정하고자 한다. 액션에서는 리눅스 cron을 지원한다.

1
2
schedule:
- cron: '40 4 * * *'

액션에서 작동하는 cron은 UTC 기준이기 때문에 시간을 잘 맞춰주어야 한다. UTC는 9시간을 더해야 한국 시간이며, 따라서 위 시간은 한국시간으로 13시 40분이다.

workflow_dispatch

이제 수동으로 작업을 실행할 수 있는 코드도 작성해보자. 보통 테스트를 해야하거나 작업이 실패했을 시 수동으로 작업을 실행하기 위해서 해당 코드도 추가한다.

1
workflow_dispatch:

그러면 액션에서 아래처럼 수동으로 실행할 수 있는 트리거가 생성된다.

action2

build-linux

이제 작업이 실행될 리눅스 환경을 설정한다. max-parallel은 병렬로 처리하려는 작업의 개수를 지정하며, matrix는 작업을 실행할 언어 버전을 지원한다. 아래 코드는 파이썬 3.9 버전에서 작동되도록 설정한 것이다.

1
2
3
4
5
6
build-linux:
runs-on: ubuntu-latest
strategy:
max-parallel: 1
matrix:
python-version: [3.9]

위 코드는 ubuntu 운영체제를 바탕으로 파이썬 3.9 버전을 병렬처리 없이 1개의 환경에서 진행된다는 의미이다.

steps

이제 본격적으로 작업내용을 작성해보자. 일단 스크래핑을 자동화하는 방법은 다음과 같다.

  1. 사용할 코드 가져오기 (actions/checkout@v2)
  2. 파이썬 설치하기 (Set up Python)
  3. 필요한 패키지 설치하기(Install python package)
  4. 크롬드라이버 설치하기 (Setup Chromedriver)
  5. 파이썬 스크립트 실행하기 (Build)

위에서 사용되는 파이썬 스크립트는 데이터를 스크래핑해서 DB에 저장하는 코드를 작성한 것이다.

최종 스크립트

위 내용들을 바탕으로 작성한 최종 스크립트는 아래와 같다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
name: auto-scraping KBOdata

on:
schedule:
- cron: '40 4 * * *'
# UTC가 default. 한국 시간으로 오후 1시 40분 실행
workflow_dispatch:

jobs:
build-linux:
runs-on: ubuntu-latest
strategy:
max-parallel: 1
matrix:
python-version: [3.9]

steps:
- uses: actions/checkout@v2
- name: Set up Python {{ matrix.python-version }}
uses: actions/setup-python@v1
with:
python-version: ${{ matrix.python-version }}
- name: Install python package
run: |
pip install kbodata
pip install -r requirements.txt
- name: Setup Chromedriver
uses: nanasess/setup-chromedriver@v1.0.1
- name: Build
run: |
cd kbo_data
python action.py ${{ secrets.DB_INFO }}

Github Action으로 스크래핑 자동화하기
https://dev-bearabbit.github.io/ko/Git/git-0/
Author
Jess
Posted on
2022년 5월 5일
Licensed under