Scrapy 실행까지 해 보았으면 settings.py에서 설정 할 수 있는 것들에 대해 정리 하겠다.😉
settings.py
를 사용하면 코어, 확장, 파이프 라인 및 스파이더 자체를 포함하여 모든 Scrapy 구성 요소의 동작을 사용자 지정할 수 있다.
Settings.py를 실행하는 방법에는 5가지가 있다.
가장 많이 사용하고 추천하는 방법은 Settings.py
설정 이다.
scrapy crawl myspider -s LOG_FILE=scrapy.log
class MySpider(scrapy.Spider):
name = 'myspider'
custom_settings = {
'SOME_SETTING': 'some value',
}
Settings.py 설정
대부분 settings.py 파일에 설정을 추가하거나 변경한다.
명령별 기본설정
Scrapy tool command는 전역 기본 설정을 재정의하는 자체 기본 설정을 가질 수 있다. custom command 설정은 default_settings 명령 클래스 의 속성에 지정된다.
global 설정
기본값은 scrapy.settings.default_settings
모듈에 있다.
settings.py
설정 목록을 알아 보겠다. 이 밖에 많은 설정은 공식문서 홈페이지에 포함 되어 있다.
# Scrapy 프로젝트에서 구현 한 bot 이름 (프로젝트 이름이라고도 함)
BOT_NAME = 'test'
SPIDER_MODULES = ['test.spiders']
NEWSPIDER_MODULE = 'test.spiders'
# User-agent 설정
USER_AGENT = 'test'
# 타켓 사이트 Robots.txt 준수 여부
# True 활성화하면 Scrapy는 robots.txt 정책을 준수
ROBOTSTXT_OBEY = False
# 병렬 처리. 주석처리면 기본 16으로 설정됨
# Scrapy 다운로더가 수행 할 최대 동시 (즉, 동시) 요청 수
CONCURRENT_REQUESTS = 32
# 다운로드 딜레이
# 웹 사이트에서 연속 페이지를 다운로드하기 전에 다운로더가 기다려야하는 시간 (초)
DOWNLOAD_DELAY = 2
# 웹 사이트 도메인 동시 병렬 처리 개수
CONCURRENT_REQUESTS_PER_DOMAIN = 16
# 특정 웹 사이트 IP 주소 병렬 처리 개수
CONCURRENT_REQUESTS_PER_IP = 16
# 쿠키 활성화 여부
COOKIES_ENABLED = True
# Telnet Console 활성화 여부
TELNETCONSOLE_ENABLED = False
# 기본 Request 헤더
DEFAULT_REQUEST_HEADERS = {
'Referer': 'https://news.daum.net/',
}
# 미들웨어 사용 여부
SPIDER_MIDDLEWARES = {
'test.middlewares.TestSpiderMiddleware': 543,
}
# 특정 다운로드 미들웨어 사용
DOWNLOADER_MIDDLEWARES = {
'test.middlewares.TestDownloaderMiddleware': 543,
}
# 프로젝트에서 활성화 된 확장과 그 순서를 포함하는 dict
EXTENSIONS = {
'scrapy.extensions.telnet.TelnetConsole': None,
}
파이프라인 설정
ITEM_PIPELINES = {
'test.pipelines.TestPipeline': 300,
}
# 캐시를 사용하면 동일하게 여러 번 요청 시 서버 사이드에 부하 절감 가능(변동사항 없을 경우)
# 캐시 사용 여부
HTTPCACHE_ENABLED = False
# 캐시 유효 기간
HTTPCACHE_EXPIRATION_SECS = 30
# 캐시 저장 경로
HTTPCACHE_DIR = 'httpcache'
# 응답 거부 캐시
HTTPCACHE_IGNORE_HTTP_CODES = []
HTTPCACHE_STORAGE = 'scrapy.extensions.httpcache.FilesystemCacheStorage'
# 한글 쓰기(출력 인코딩)
FEED_EXPORT_ENCODING = 'utf-8'
# 오류 처리
# 자동 재시도 설정
RETRY_ENABLED = True
# 재시도 횟수 최대값
RETRY_TIMES = 2
# 재시도 대상 HTTP 코드
RETRY_HTTP_CODES = [500, 502, 503, 504, 408]
# 오류 무시 HTTP 상태 코드
HTTPERROR_ALLOWED_CODES = [404]
# 모든 상태 코드 오류 무시 (사용 비추천)
HTTPERROR_ALLOW_ALL = False
setting.py
에서 파일 지정 or Scrapy를 실행할 때 명령어를 사용하면 된다.
-o
파일명.확장자로 파일이름을 지정하고 -t
파일 타입 ('json', 'jsonlines', 'jl', 'csv', 'xml', 'marshal', 'pickle') 이 중에서 설정하면 된다.
scrapy crawl [스파이더 이름] -o [파일이름] -t [파일형식]
# 파일 내보내기
scrapy crawl test -o result.jl -t jsonlines
scrapy crawl test -o result.csv -t csv
scrapy crawl test -o result.json -t json