데이터 분석/웹 스크래핑

[Web Scrapping 실습] Auto Crawler

eunnys 2023. 11. 6. 10:03

schedule 모듈

!pip install schedule

 
 
schedule 모듈 활용
- while 반복문을 활용하여 꾸준히 스케줄을 유지한다.
- 특정 조건에 만족하는 스케줄이 있을 때마다 해당 함수 실행
 

import schedule
import time

# 스케줄에 의해 실행될 코드를 담는 함수 선언
def job():
    now = time.localtime()
    print(f'{now.tm_year:04d}-{now.tm_mon:02d}-{now.tm_mday:02d} {now.tm_hour:02d}:{now.tm_min:02d}:{now.tm_sec:02d}')

schedule.every(10).seconds.do(job) # 매 10초마다 job함수를 실행 (매 1초마다는 every().second 단수형 선택)

while True:
    schedule.run_pending() # 시간이 됐을 때 실행해줄 것을 요청

 
 
시간별 스케줄 잡 실행하기
 

import schedule
import time

# 스케줄에 의해 실행될 코드를 담는 함수 선언
def job():
    now = time.localtime()
    print(f'{now.tm_year:04d}-{now.tm_mon:02d}-{now.tm_mday:02d} {now.tm_hour:02d}:{now.tm_min:02d}:{now.tm_sec:02d}')

schedule.every(3).seconds.do(job) # 매 3초마다 job함수 실행
schedule.every(3).minutes.do(job) # 매 3분마다 job함수 실행
schedule.every(3).hours.do(job) # 매 3시간마다 job함수 실행
schedule.every(3).days.do(job) # 매 3일마다 job함수 실행
schedule.every(3).weeks.do(job) # 매 3주마다 job함수 실행

schedule.every().hour.at(':23').do(job) # 매 시 23분마다 job함수 실행
schedule.every().minute.at(':23').do(job) # 매 분 23초마다 job함수 실행

schedule.every(5).hours.at('20:30').do(job) # 매 5시간째 20분 30초마다 job함수 실행 
# 02시00분 -> 06시20분30초 (06시는 4시간째, 06시 1분부터 5시간쨰) 

# 매일 지정된 시간에 job함수 실행
schedule.every().day.at('10:30:30').do(job) # 매일 10시 30분 30초에 job함수 실행

# 지정된 요일과 시간에 job함수 실행
schedule.every().monday.do(job) # 매 월요일이 되는 00시에 job함수 실행
schedule.every().wednesday.at('13:15').do(job) # 매 수요일 13시 15분에 job함수 실행

# 월을 의미하는 month 속성은 없다

while True:
    schedule.run_pending()

 
 
매월 특정 일 특정시 간에 job 실행
- schedule 모듈에는 month 필드가 없다
 

from datetime import date

# 매월 1일 2시에 작업 실행
def job():
    if date.today().day != 1:
        return
    # 실제 job 실행 코드 작성

schedule.every().dat.at('02:00').do(job)

 
 
▶  job 함수에 인수 값 전달
 

import schedule
import time

def greet(name):
    print('Hello', name)
    now = time.localtime()
    print(f'{now.tm_year:04d}-{now.tm_mon:02d}-{now.tm_mday:02d} {now.tm_hour:02d}:{now.tm_min:02d}:{now.tm_sec:02d}')

schedule.every(1).second.do(greet, name='Alice')

while True:
    schedule.run_pending()

 
 
job 함수 실행 취소하기
 

import schedule
import time

def message1():
    print('매 1초마다 스케줄1 실행')

def message2(text):
    print(text+' 스케줄 2 실행')

job1 = schedule.every().second.do(message1)
job2 = schedule.every(2).seconds.do(message2, text='매 2초마다')

count = 0

while True:
    schedule.run_pending()
    # sleep(1) 없으면 while문 안에서의 반복의 속도는 CPU의 속도로 처리되기 때문에 채 1초가 되기도 전에 job1 실행이 취소가 됨
    time.sleep(1) 

    count += 1
    print(job1)

    if count > 5:
        print(job1)
        schedule.cancel_job(job1) # 백그라운드에서 완전히 사라짐

 
 
지정된 시간까지 job 실행
 

import schedule
from datetime import datetime, time
import time

def job():
    now = time.localtime()
    print(f'{now.tm_year:04d}-{now.tm_mon:02d}-{now.tm_mday:02d} {now.tm_hour:02d}:{now.tm_min:02d}:{now.tm_sec:02d}')

# 오늘 11:32:00까지 job 실행
schedule.every(5).seconds.until('11:32:00').do(job) # 5초마다 실행하다가 11:32:00가 되면 실행 종료

# 2023-12-31 18:00까지 job 실행
schedule.every().hour.until('2023-12-31 18:00').do(job) # 매 시간마다 실행하다가 2023-12-31 18:00에 실행 종료
schedule.every().hour.until(datetime(2023, 12, 31, 18, 00, 00)).do(job) # datetime 클래스 사용 시 6개의 정수를 넣어줌

while True:
    if not schedule.jobs: # 스케줄에 더 이상 남아있는 job이 없으면 종료
        break
    schedule.run_pending()
    time.sleep(1) # 매 1초마다 체크