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 스케줄링
- 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
728x90
'WENIV' 카테고리의 다른 글
웹/네트워크/HTTP 베이스캠프 for developer - 웹 기초용어 정리 (3) | 2024.12.31 |
---|---|
Python 알고리즘 베스트 10 - 자격 증명 (0) | 2024.12.31 |
[위니브 엠버서더 4기] 합격 후기 - 성장과 나눔을 동시에! (1) | 2024.12.17 |