Akashic Records

Scrapy, logging 본문

Web Crawling for Beginners

Scrapy, logging

Andrew's Akashic Records 2024. 5. 16. 15:39
728x90

Here is the image showing a programmer integrating the Scrapy framework with logging functionality in Python. The setting captures a modern tech environment with a focus on software development. You can view the image above.

 

Scrapy에서 로그를 작성하는 방법은 여러 가지가 있습니다. 로깅 시스템을 사용하면 크롤링 프로세스의 세부 사항을 기록하여 디버깅을 쉽게 하고 문제를 빠르게 해결할 수 있습니다.

 

Scrapy 로깅 설정

Scrapy는 Python의 내장 logging 라이브러리를 사용하여 로그를 관리합니다. 기본적으로 Scrapy는 다양한 로그 레벨(INFO, WARNING, ERROR 등)로 메시지를 출력합니다.

 

기본 로그 설정

Scrapy의 settings.py 파일에서 로그 레벨을 설정할 수 있습니다. 예를 들어, 로그 레벨을 DEBUG로 설정하면 다음과 같이 할 수 있습니다:

LOG_LEVEL = 'DEBUG'

이렇게 하면 DEBUG 레벨 이상의 모든 로그가 출력됩니다.

 

로그 파일 설정

로그 메시지를 파일에 저장하고 싶다면, settings.py에 다음과 같이 추가하세요:

LOG_FILE = 'scrapy_log.txt'

이 설정은 모든 로그를 scrapy_log.txt 파일에 저장합니다.

 

커스텀 로그 핸들러

Scrapy에서 커스텀 로그 핸들러를 설정하려면 Python의 logging 모듈을 사용하여 핸들러를 추가할 수 있습니다. 예를 들어, 로그를 콘솔과 파일에 동시에 출력하도록 설정할 수 있습니다:

import logging
from scrapy.utils.log import configure_logging

# 기존의 로그 설정을 무시하고 새로 설정
configure_logging(install_root_handler=False)
logging.basicConfig(
    filename='mycrawler.log',
    format='%(levelname)s: %(message)s',
    level=logging.DEBUG
)

# 콘솔 로그 설정 추가
console = logging.StreamHandler()
console.setLevel(logging.INFO)
formatter = logging.Formatter('%(name)-12s: %(levelname)-8s %(message)s')
console.setFormatter(formatter)
logging.getLogger('').addHandler(console)

 

로그 활용 예

로그를 활용하면 크롤러의 상태를 모니터링하고 문제를 식별하는 데 도움이 됩니다. 예를 들어, 특정 조건을 만족하는 경우에만 로그를 남기도록 설정할 수 있습니다:

def parse(self, response):
    if 'error' in response.body:
        self.logger.error('Error found in response.')
    else:
        self.logger.info('Response received successfully.')

위 코드는 응답에 'error'가 포함되어 있으면 오류 로그를, 그렇지 않으면 정보 로그를 남깁니다.

Scrapy의 로깅 시스템을 효과적으로 사용하면 크롤러의 성능을 모니터링하고 필요에 따라 조정할 수 있습니다. 로그를 통해 크롤링 프로세스의 투명성과 관리 가능성을 높일 수 있습니다.

728x90
Comments