-
Scrapy는 웹사이트를 크롤링하고 데이터 마이닝, 정보처리 및 기록 보관 등 범용적으로 사용되는 애플리케이션 프레임워크임.
-
특히, 빠른 웹 크롤링 및 웹 스크래핑, 데이터 마이닝, 모니터링 및 자동 테스트 등 기존의 크롤러 라이브러리와 차원이 다른 수의 기능들을 제공
-
이벤트 기반 네트워킹 프레임워크인 Twisted기반으로 작성되었으며, 동시성을 위한 비차단(일명 비동기)코드를 사용하여 구현
-
DataFlow
- Scrapy는 엔진에 의해 제어되고 다음과 같은 데이터 흐름을 통해 작동됨.
- 엔진이 Spider에서 초기 크롤링 요청을 받음
- 엔진은 스케출러에서 요청을 예약하고 크롤링할 다음 Request를 요청
- 스케줄러는 다음 Request를 엔진에 반환함.
- 엔진은 다운로더 미들웨어를 통해 Request를 다운로더에 전송 (process_request())
- 페이지 다운로드가 완료되면 다운로더는 Response(해당 페이지포함)를 생성하고 다운로더 미들웨어를 통해 엔진으로 전송 (process_response())
- 엔진은 다운로더로 부터 Response를 받고 처리를 위해 Spider 미들웨어를 통해 Spider로 전송함.(process_spider_input())
- Spider는 response를 처리하고 Spider 미들웨어를 통과하여 스크랩한 Item 및 새로운 Requests(추가적으로 해야하는 요청)을 엔진에 반환(process_spider_output)
- 엔진은 처리된 Item을 Item Pipeline으로 전송한 다음 처리된 Request를 스케줄러로 보내고, 가능한 다음 크롤링 Request를 요청함.
- 스케줄러에서 더이상 Request가 남아있지 않을 때 까지 프로세스 반복(3부터)
- 구성
- Scrapy Engine
- 엔진은 시스템의 모든 구성 요소간의 데이터 흐름 제어 및 특정 작업 발생 시 이벤트를 트리거 함
- Scheduler
- 엔진으로부터 Request를 수신하고 엔진이 요청할 때 나중에 엔진에 공급하기 위해 대기열에 저장해둠
- Downloader
- 다운로더는 웹 페이지를 가져와 엔진에 공급하고, 엔진은 이를 다시 스파이더에 공급하는 역할
- Spiders
- Spider는 Scrapy 사용자가 Response의 구문을 분석하고 항목을 추출하거나 따라야할 추가 Request를 추출하기 위해 작성한 사용자 정의 클래스
- Item Pipeline
- Item Pipeline은 Spider가 항목을 추출(또는 스크래핑)한 후 이를 처리하는 역할 담당
- 정리, 유효성 검사 및 Transaction(Database에 항목 저장 등)이 포함
- Downloader Middlewares
- Downloader Middlewares는 엔진과 다운로더 사이에 위치해 엔진에서 다운로더로 전달되는 request와 다운로더에서 엔진으로 전달되는 Response의 응답을 처리하는 특정 후크
- 다음 역할을 수행하기 위해 다운로더 미들웨어를 사용
- Requests가 다운로더로 전송되기 직전(즉, Scrapy가 웹사이트로 Request를 보내기 직전)Request를 처리
- Spider가 전달하기 전에 수신된 Response를 변경
- 웹페이지를 가져오지 않고 Spider에게response 전달
- 일부 Request를 조용히 삭제
- Spider Middlewares
- Spider Middlewares는 엔진과 Spider사이에 위치하여 Spider 입력(response)및 출력(Item, Request)를 처리할 수 있는 특정 후크
- 다음 역할 수행에 스파이더 미들웨어가 사용됨
- Spider 콜백 출력 후 처리 - Request 또는 Item의 변경, 추가, 제거
- start_requests를 후처리함
- Spider 예외를 처리
- Response내용에 따라 일부 Request에 대해 콜백 대신 에러백을 호출