본문 바로가기

WENIV

GitHub Action을 활용한 자동 크롤러 웹 페이지 만들기 - GitHub Actions, CI/CD, yaml

728x90
학습 내용

 

  • GitHub Actions에 대해 알 수 있다.
    GitHub Actions를 사용하여 Python 크롤러 자동화 파이프라인 구축
     스케줄링을 통해 주기적으로 데이터를 수집 및 업데이트
  • yaml 파일에 대해 알 수 있다
    YAML을 사용하여 GitHub Actions Workflow 구성
  • Python을 통해 데이터를 크롤링하고 JSON으로 저장

 

실습 링크 :

https://github.com/seongyeon1/github_crawler.git

 

1. GitHub Actions란?

  • GitHub Actions는 GitHub에서 제공하는 CI/CD (지속적 통합/지속적 배포) 도구입니다. 쉽게 말해 “GitHub에서 제공하는 자동화 컴퓨터 시스템”입니다.
  • CI (Continuous Integration): 지속적인 통합
    • 코드의 품질을 지속적으로 확인하고 통합합니다.
    • 여러 개발자가 협업 시 코드 통합 문제를 줄여줍니다.
  • CD (Continuous Deployment/Delivery): 지속적인 배포
    • 항상 신뢰 가능한 수준에서 소프트웨어를 배포합니다.
    • 수작업을 줄이고 복합적인 문제를 자동화합니다.

 

2. YAML(.yml) 파일이란?

  • YAML은 데이터 표현을 위한 경량 마크업 언어입니다. JSON과 유사하지만 더 간결하고 가독성이 뛰어납니다.

 기본 문법

# 주석은 # 사용
---
name: 이호준
age: 10

 

  • 들여쓰기로 계층 구조를 표현합니다.
  • 리스트는 -로 시작합니다.
key: 
  key1:
    key2:
      key3: value

 

변수를 사용할 땐 중괄호 {{ }} 사용

foo: "{{ variable }}"

 

자세한 문법 참고 문서

GitHub Actions YAML 문법

 

주요 개념 및 코드 예제

GitHub Actions 스케줄링

  • GitHub Actions는 Cron 형식으로 주기적인 작업을 스케줄링할 수 있습니다.
  • Cron 형식은 반복 작업 주기를 설정합니다.
name: Scheduled Crawler

on:
  schedule:
    - cron: '*/10 * * * *'  # 10분마다 실행

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - name: 파일 목록 출력
        run: ls
      - name: Python 패키지 업그레이드
        run: python -m pip install --upgrade pip
      - name: Python 환경 설정
        run: pip install -r requirements.txt
      - name: Python 스크립트 실행
        run: python crawling.py

 

Python을 활용한 웹 크롤링

  • Python의 requests와 BeautifulSoup 라이브러리를 사용하여 웹 페이지의 데이터를 수집합니다.
  • 크롤링한 데이터를 JSON 파일로 저장하고 가공합니다.
import requests
from bs4 import BeautifulSoup
import json

# 데이터 크롤링
response = requests.get("http://paullab.synology.me/stock.html")
response.encoding = 'utf-8'
soup = BeautifulSoup(response.text, 'html.parser')

rows = soup.select('.main')[2].select('tbody > tr')[1:]

data = []
for row in rows:
    data.append({
        '날짜': row.select('td')[0].text,
        '종가': int(row.select('td')[1].text.replace(',', '')),
        '전일비': int(row.select('td')[2].text.replace(',', '')),
        '거래량': int(row.select('td')[6].text.replace(',', '')),
    })

# JSON 파일로 저장
with open('data.json', 'w', encoding='UTF-8-sig') as f:
    json.dump(data, f, ensure_ascii=False, indent=4)

 

GitHub Actions Workflow 설정

YAML Workflow 설정

name: Automated Crawler

on: [push]

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
        with:
          persist-credentials: false
      - name: Python 패키지 업그레이드
        run: python -m pip install --upgrade pip
      - name: Python 환경 설정
        run: pip install -r requirements.txt
      - name: Python 스크립트 실행
        run: python crawling.py
      - name: Commit 변경사항
        run: |
          git config --local user.email "example@gmail.com"
          git config --local user.name "example"
          git add .
          git commit -m "Run crawler and update current data"
      - name: Push 변경사항
        uses: ad-m/github-push-action@master
        with:
          github_token: ${{ secrets.GITHUB_TOKEN }}

 

주요 포인트 정리

1. YAML 구성: GitHub Actions Workflow를 정의합니다.
2. Python 크롤링: 데이터를 수집하고 JSON 파일로 저장합니다.
3. 자동화: 주기적으로 스크립트를 실행하거나 Push 이벤트로 실행합니다.
4. 데이터 업데이트: 변경사항을 GitHub에 자동으로 푸시합니다.

 

마무리

이번 학습을 통해 GitHub Actions를 사용해 웹 크롤러를 자동화하는 방법을 익혔습니다. YAML 문법과 Python 크롤링 스크립트를 연동하여 주기적으로 데이터를 업데이트하고, GitHub Actions를 통해 워크플로우를 자동화했습니다.

 

이제 더 복잡한 자동화 파이프라인을 설계할 수 있는 기반을 마련했습니다!

최근 회사에서 CICD를 배우게 되었는데 이에 대해 좀 더 자세히 알 게 되어 재미있습니다 :)

 

참고자료

 

https://www.inflearn.com/course/github-action-%ED%81%AC%EB%A1%A4%EB%9F%AC/dashboard

 

Github Action을 활용한 크롤러 웹 페이지 만들기 강의 | 제주코딩베이스캠프 - 인프런

제주코딩베이스캠프 | Github 초급자도 가능! Python 초급자도 가능! Github Action를 활용하여 주기적인 크롤링을 하는 크롤링 웹 서비스를 제작합니다., [사진]     [사진][사진] 🐱‍🏍 연습용 크롤

www.inflearn.com

 

GitHub Actions 공식 문서

Crontab.guru

GitHub Push Action

YAML 공식 문서

728x90