#!/usr/bin/env python3 # -*- coding: utf-8 -*- """ 통합 정당 크롤러 스케줄러 - 더불어민주당, 국민의힘, 조국혁신당, 개혁신당, 기본소득당, 진보당 매일 자동 크롤링 """ import asyncio import logging from apscheduler.schedulers.asyncio import AsyncIOScheduler from apscheduler.triggers.cron import CronTrigger from unified_crawler import crawl_all_parties logging.basicConfig( level=logging.INFO, format='%(asctime)s [%(levelname)s] %(message)s', handlers=[ logging.FileHandler('unified_scheduler.log', encoding='utf-8'), logging.StreamHandler() ] ) logger = logging.getLogger(__name__) async def scheduled_task(): logger.info("=" * 60) logger.info("스케줄된 크롤링 시작 (6개 정당)") logger.info("=" * 60) try: await crawl_all_parties() logger.info("스케줄된 크롤링 완료") except Exception as e: logger.error(f"크롤링 실패: {e}", exc_info=True) def main(): scheduler = AsyncIOScheduler() scheduler.add_job( scheduled_task, trigger=CronTrigger(hour=9, minute=0), id='daily_crawl_all', name='통합 정당 크롤러 일일 실행', replace_existing=True ) logger.info("통합 정당 크롤러 스케줄러 시작") logger.info("매일 오전 9시에 6개 정당 크롤링 실행") logger.info("종료하려면 Ctrl+C를 누르세요") scheduler.start() try: asyncio.get_event_loop().run_forever() except (KeyboardInterrupt, SystemExit): logger.info("스케줄러 종료") if __name__ == "__main__": main()