config.py 에 설정 추가
"""
크롤링 설정 파일
"""
# 브라우저 설정
BROWSER_CONFIG = {
'headless': True, # True로 설정하면 브라우저 창이 보이지 않음
'wait_timeout': 30, # JavaScript 로딩 대기 시간 (초)
'request_delay': 3, # 요청 간 대기 시간 (초)
}
# 로깅 설정
LOGGING_CONFIG = {
'level': 'INFO', # DEBUG, INFO, WARNING, ERROR
'format': '%(asctime)s - %(levelname)s - %(message)s'
}
Crawler class 정의
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.chrome.service import Service
from webdriver_manager.chrome import ChromeDriverManager
from config import BROWSER_CONFIG
# 로깅 설정
logging.basicConfig(
level=getattr(logger, LOGGING_CONFIG['level'],
format=LOGGING_CONFIG['format']
)
logger = logging.getLogger(__name__)
class Crawler:
"""크롤링 클래스"""
def __init__(self):
"""
초기화
Args:
headless: 헤드리스 모드 사용 여부 (None이면 config.py에서 가져옴)
"""
self.headless = BROWSER_CONFIG['headless']
self.request_delay = BROWSER_CONFIG['request_delay']
self.driver = None
def setup_driver(self) -> webdriver.Chrome:
"""Chrome 드라이버 설정"""
# 브라우저 옵션 설정
chrome_option = Options()
if self.headless:
chrome_options.add_argument('--headless')
chrome_options.add_argument('--no-sandbox')
chrome_options.add_argument('--disable-dev-shm-usage')
chrome_options.add_argument('--disable-blink-features=AutomationControlled')
chrome_options.add_experimental_option("excludeSwitches", ["enable-automation"])
chrome_options.add_experimental_option('useAutomationExtension', False)
try:
service = Service(ChromeDriverManager().install())
self.driver = webdriver.Chrome(service=service, options=chrome_options)
self.driver.execute_script("Object.defineProperty(navigator, 'webdriver', {get: () => undefined})")
logger.info("Chrome 드라이버 초기화 완료")
return self.driver
except Exception as e:
logger.error(f"드라이버 초기화 실패: {e}")
raise
def main():
"""메인 함수"""
logger.info("=== 크롤링 도구 시작 ===")
# 크롤러 초기화
crawler = Crawler()
try:
# TODO
except Exception as e:
logger.error(f"메인 실행 중 오류: {e}")
finally:
crawler.close()
logger.info("=== 크롤링 도구 종료 ===")
if __name__ == "__main__":
main()