학습 기록
Python 공부 기록 #10 - 매일 자동으로 크롤링하기 (Windows 작업 스케줄러)
- 목차
인트로: 아침마다 직접 실행하는 건 자동화가 아니잖아
자동화의 마지막 조각, 스케줄링
먼저 Python 파일부터 정리하기
.bat 파일 만들기
Windows 작업 스케줄러 설정하기
진짜 실행됐는지 확인하는 방법
삽질했던 부분들
아웃트로: 출근하면 데이터가 모여있게 만들기
- 인트로: 아침마다 직접 실행하는 건 자동화가 아니잖아
지난 포스팅에서 여러 페이지를 넘기면서 데이터를 긁어오는 데 성공했습니다.
명언 사이트 10페이지를 한 번에 가져오고, Excel 파일로 저장하는 것까지 됐어요.
근데 한 가지 아쉬운 점이 있었습니다.
“그래서 이 코드는 내가 매일 직접 실행해야 하는 건가?”
파일을 더블클릭하고, 터미널을 열고, 실행이 끝날 때까지 기다리는 건 분명 편해졌지만 완전한 업무 자동화 느낌은 아니었습니다.
제가 원했던 건 출근해서 PC를 켰을 때, 이미 필요한 데이터가 Excel에 정리되어 있는 모습이었거든요.
오늘은 만든 Python 크롤러를 매일 정해진 시간에 실행하는 방법을 정리해 봤습니다.
- 자동화의 마지막 조각, 스케줄링
이런 식으로 생각하면 이해가 쉬웠습니다.
Python 코드: 일을 하는 직원
Windows 작업 스케줄러: 정해진 시간에 직원을 출근시키는 알람
Python 파일이 아무리 잘 만들어져 있어도, 실행 버튼을 누르는 사람이 필요하면 반자동에 가깝습니다.
반대로 작업 스케줄러에 “평일 오전 7시에 이 파일 실행”이라고 등록해두면, PC가 켜져 있는 동안 Windows가 알아서 Python 파일을 실행해 줍니다.
처음엔 작업 스케줄러라는 이름부터 좀 어렵게 느껴졌습니다.
그런데 막상 해보니 매일 엑셀 파일을 열어서 복사·붙여넣기 하는 것보다 훨씬 단순했습니다.
- 먼저 Python 파일부터 정리하기
우선 기존 크롤링 코드를 하나의 파일로 저장했습니다.
파일명은 daily_crawler.py로 정했습니다.
테스트할 때는 화면에 결과만 출력해도 됐지만, 자동 실행할 때는 언제 실행됐는지 기록이 남아 있으면 좋겠더라고요.
그래서 실행 시간을 함께 출력하는 코드를 넣어봤습니다.
예제 코드
from datetime import datetime
now = datetime.now()
print(“크롤링 작업을 시작합니다.”)
print(f“실행 시간: {now.strftime(‘%Y-%m-%d %H:%M:%S’)}”)
여기에 기존 크롤링 코드를 넣습니다.
print(“크롤링 작업이 완료되었습니다.”)
datetime.now()는 지금 시간을 가져옵니다.
strftime()은 가져온 시간을 사람이 읽기 좋은 형태로 바꿔줍니다.
이 코드는 크롤링 자체를 하는 코드는 아니지만, 나중에 자동 실행이 됐는지 확인할 때 꽤 유용했습니다.
.bat파일 만들기
다음으로 Python 파일을 실행해 줄 작은 실행 파일을 만들었습니다.
메모장을 열고 아래 내용을 입력한 뒤, run_crawler.bat라는 이름으로 저장하면 됩니다.
@echo off
“C:\Users\내이름\AppData\Local\Programs\Python\Python313\python.exe” “C:\PythonStudy\daily_crawler.py”
여기서 중요한 건 경로입니다.
첫 번째 경로는 내 PC에 설치된 Python 실행 파일 위치입니다.
두 번째 경로는 아까 저장한 daily_crawler.py 파일 위치입니다.
저는 처음에 경로를 대충 적었다가 실행이 안 됐습니다.
파일 탐색기에서 Python과 Python 파일을 각각 찾은 뒤, Shift + 오른쪽 클릭으로 경로 복사를 해서 붙여넣으니 해결됐습니다.
.bat 파일을 더블클릭했을 때 Python 코드가 실행되면 준비 완료입니다.
- Windows 작업 스케줄러 설정하기
이제 Windows 검색창에 작업 스케줄러를 입력해서 실행합니다.
오른쪽 메뉴에서 기본 작업 만들기를 눌렀습니다.
설정은 아래처럼 했습니다.
이름: 매일 크롤링
트리거: 매일
시작 시간: 오전 7시
동작: 프로그램 시작
프로그램/스크립트: 방금 만든 run_crawler.bat 파일 선택
저는 출근 전에 작업이 끝나 있으면 좋겠어서 오전 7시로 정했습니다.
업무에서 전일 매출이나 거래처 데이터를 받아야 한다면, 회사 PC가 켜지는 시간과 데이터 갱신 시간을 고려해서 정하면 될 것 같습니다.
ChatGPT에게 “내 Python 경로는 어떻게 확인해?” 또는 “작업 스케줄러에서 bat 파일이 실행되지 않아”라고 물어보면서 하나씩 확인한 것도 도움이 됐습니다.
- 진짜 실행됐는지 확인하는 방법
설정만 해두고 다음 날까지 기다리기는 불안했습니다.
그래서 작업 스케줄러에서 방금 만든 작업을 오른쪽 클릭한 뒤 실행을 눌러봤습니다.
이때 Excel 파일이 새로 만들어지는지, 실행 시간이 출력되는지 확인했습니다.
작업 스케줄러의 기록 탭에서도 성공 여부를 볼 수 있습니다.
만약 실행이 안 됐다면 대부분은 아래 둘 중 하나였습니다.
Python 실행 파일 경로가 틀린 경우
Python 파일 경로에 한글이나 공백이 들어가 따옴표 처리가 안 된 경우
- 삽질했던 부분들
가장 당황했던 건 .bat 파일을 더블클릭하면 검은 화면이 잠깐 떴다가 바로 사라지는 현상이었습니다.
처음엔 오류가 없는 줄 알았습니다.
찾아보니 오류가 나도 창이 바로 닫히니까 내용을 볼 수 없었던 거였습니다.
이럴 때 .bat 파일 마지막 줄에 pause를 넣으면 창이 바로 닫히지 않습니다.
@echo off
“C:\Users\내이름\AppData\Local\Programs\Python\Python313\python.exe” “C:\PythonStudy\daily_crawler.py”
pause
이제 오류가 나면 화면에 메시지가 남아서 원인을 확인할 수 있습니다.
테스트가 끝난 뒤에는 pause를 지우는 편이 자동 실행에는 더 편했습니다.
- 아웃트로: 출근하면 데이터가 모여있게 만들기
오늘은 Windows 작업 스케줄러로 Python 크롤러를 매일 실행하는 방법을 정리했습니다.
핵심 정리
Python 코드를 .py 파일로 저장하기
실행용 .bat 파일 만들기
Windows 작업 스케줄러에 시간 등록하기
수동 실행으로 먼저 확인하기
이제 할 수 있는 것들이 조금씩 늘어났습니다.
매일 아침 뉴스 제목을 Excel로 저장하기
환율 데이터를 정해진 시간에 모으기
쇼핑몰 가격 변화를 기록하기
반복되는 업무용 파일 만들기
드디어 “내가 실행해야 하는 코드”에서 “알아서 실행되는 코드”로 한 단계 넘어온 느낌입니다.
다음 포스팅에서는 크롤링한 데이터를 pandas로 불러와서 표처럼 정리해보겠습니다.
혹시 설명 중에 틀린 부분이나 더 좋은 방법이 있으면 알려주세요! 😊