Scrapy - settings.py와 파일 내보내기

💜poiuyy0420·2021년 1월 27일
0

Python

목록 보기
4/5
post-thumbnail

Scrapy Tutorial

Scrapy 실행까지 해 보았으면 settings.py에서 설정 할 수 있는 것들에 대해 정리 하겠다.😉

Settings

settings.py를 사용하면 코어, 확장, 파이프 라인 및 스파이더 자체를 포함하여 모든 Scrapy 구성 요소의 동작을 사용자 지정할 수 있다.

Settings.py를 실행하는 방법에는 5가지가 있다.
가장 많이 사용하고 추천하는 방법은 Settings.py 설정 이다.

  1. Command line 실행 시
    -s(또는 --set) Command line 옵션을 사용하여 하나 이상의 설정을 명시 적으로 재정의 할 수 있다.
scrapy crawl myspider -s LOG_FILE=scrapy.log
  1. Spider 실행 시
    spider 실행 시 직접 지정하여 우선 순위를 적용하고 프로젝트 설정을 재정의 할 수 있다. custom_settings으로 설정한다.
class MySpider(scrapy.Spider):
    name = 'myspider'

    custom_settings = {
        'SOME_SETTING': 'some value',
    }
  1. Settings.py 설정
    대부분 settings.py 파일에 설정을 추가하거나 변경한다.

  2. 명령별 기본설정
    Scrapy tool command는 전역 기본 설정을 재정의하는 자체 기본 설정을 가질 수 있다. custom command 설정은 default_settings 명령 클래스 의 속성에 지정된다.

  3. global 설정
    기본값은 scrapy.settings.default_settings 모듈에 있다.

Settings.py

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

profile
안녕하세요 :)

0개의 댓글