Scrapy는 파이썬 기반의 웹 크롤링 프레임워크로, 웹사이트에서 데이터를 추출하고 처리하는 데 사용됩니다. Scrapy는 강력하고 유연한 아키텍처를 가지고 있어 크롤링 작업을 효율적으로 수행할 수 있습니다.
아키텍처 개요
Scrapy의 아키텍처는 크게 스파이더(Spider), 스케줄러(Scheduler), 다운로더(Downloader), 아이템 파이프라인(Item Pipeline)으로 구성됩니다. 아키텍처의 각 구성 요소는 독립적으로 작동하며, 데이터를 효율적으로 처리하고 저장하는 데 필요한 작업을 수행합니다.
스파이더 (Spider)
스파이더는 크롤링 작업의 핵심이며, 웹사이트에서 원하는 데이터를 추출하는 역할을 담당합니다. 스파이더는 다음과 같은 기능을 수행합니다.
- 시작 URL을 설정하여 웹사이트에 접속합니다.
- HTML 또는 XML을 파싱하고 원하는 데이터를 추출합니다.
- 다른 페이지로 이동하며 데이터를 추출할 수 있습니다.
- 추출한 데이터를 아이템 파이프라인으로 전송합니다.
스케줄러 (Scheduler)
스케줄러는 스파이더가 크롤링할 URL을 관리하는 역할을 합니다. 스케줄러는 다음과 같은 기능을 수행합니다.
- 크롤링할 URL을 큐에 추가합니다.
- 스파이더에게 새로운 URL을 제공합니다.
- 중복되는 URL을 필터링하여 중복 요청을 방지합니다.
- 다운로더로부터 데이터를 수신할 때까지 요청된 URL을 저장합니다.
다운로더 (Downloader)
다운로더는 스파이더가 추출한 URL에 대해 HTTP 요청을 보내고, 응답 데이터를 수신하는 역할을 합니다. 다운로더는 다음과 같은 기능을 수행합니다.
- 스케줄러로부터 요청된 URL을 수신합니다.
- HTTP 요청을 보내고, 응답을 받아옵니다.
- 다운로드된 데이터를 스파이더로 전송합니다.
아이템 파이프라인 (Item Pipeline)
아이템 파이프라인은 스파이더가 추출한 데이터를 처리하고 저장하는 역할을 합니다. 아이템 파이프라인은 다음과 같은 기능을 수행합니다.
- 스파이더로부터 추출된 데이터를 수신합니다.
- 데이터를 정제하거나 가공하여 필요한 형식으로 변환합니다.
- 데이터를 저장하거나 외부 시스템에 전송합니다.
예시 코드
Scrapy를 사용하여 스파이더를 작성하는 예시 코드입니다.
import scrapy
class MySpider(scrapy.Spider):
name = 'example'
start_urls = ['https://www.example.com']
def parse(self, response):
# 웹페이지의 HTML에서 원하는 데이터를 추출하는 로직 작성
data = response.css('h1::text').extract_first()
yield {'data': data}
위의 코드는 ‘example’라는 이름의 스파이더를 정의하고, ‘https://www.example.com’에서 시작하는 URL을 설정합니다. parse
메서드는 웹페이지의 HTML에서 ‘h1’ 태그 내의 텍스트를 추출하여 ‘data’ 필드와 함께 반환합니다.
이 예시 코드를 실행하면, 스파이더가 시작 URL에 접속하여 해당 웹페이지의 ‘h1’ 태그 내용을 추출하고, 추출한 데이터를 출력하거나 저장하는 작업을 수행할 수 있습니다.
이처럼 Scrapy의 아키텍처를 이해하고 스파이더를 작성해 보면 웹 크롤링 작업을 효율적으로 수행할 수 있습니다.