
Scrapy
Scrapy는 BeautifulSoup 처럼 단순히 HTML 또는 XML 문서를 파싱하기 위한 라이브러리가 아니라,
웹 스크래핑과 크롤링을 위해 설계된 종합적인 도구
이다.
비동기 처리, 분산 처리, 내장 파이프라인 등의 특징으로 작업을 효율적으로 처리할 수 있다.
또한, 자동으로 해당 웹사이트의 robots.txt
를 파싱하여 규칙을 준수한다는 장점이 있다.
Scrapy 아키텍처

- Scheduler
- URL을 스크래핑할 순서를 제어
- Downloader
- 인터넷에서 웹페이지를 가져와 Spider에 전달
- Response
- Downloader가 가져온 웹페이지의 HTML 내용
- Spider
- Response를 처리하고 데이터를 추출하며 새로운 스크래핑 작업 생성
- Item Pipeline
- 추출한 데이터를 처리하고 저장하는데 사용
Scrapy 프로젝트
Scrapy 설치는 pip install scrapy
를 통해 간단하게 진행할 수 있다.
scrapy startproject project_name
설치 후, 위 커맨드를 통해 scrapy 프로젝트를 생성할 수 있다.
프로젝트 구조는 다음과 같다.
scrapy_project/
├── scrapy.cfg
└── scrapy_project
├── __init__.py
├── items.py # 아이템 정의 파일
├── middlewares.py # 미들웨어 정의 파일
├── pipelines.py # 아이템 파이프라인 정의 파일
├── settings.py # 프로젝트 설정 파일
└── spiders
└── __init__.py
Spider
spider
디렉토리 내부에 spider파일을 생성한다.
cd project_name/project_name/spiders
scrapy genspider spider_name sample.com
# scrapy genspider {이름} {크롤링할 사이트 도메인}
이렇게 생성된 Spider 파일은 다음과 같다.
import scrapy
class SampleSpider(scrapy.Spider):
name = "sample_spider"
allowed_domains = ["sample.com"]
start_urls = ["https://sample.com"]
def parse(self, response):
# 데이터 추출 로직
Item
Scrapy의 Item은 수집할 데이터의 모델을 정의한다. 예를 들어, 제목과 설명을 추출하려는 경우 다음과 같이 Item을 정의할 수 있다.
# items.py
import scrapy
class SampleItem(scrapy.Item):
title = scrapy.Field()
description = scrapy.Field()
Field
특정 데이터 조각을 저장하는 key-value 쌍
각각의 Field는 웹 페이지에서 추출한 데이터의 특정 부분에 대응한다.
단순 데이터 저장 뿐 아니라,meta
인자로 각 필드의 특성을 세밀하게 설정 가능
ex. 기본값 설정, 필수 필드 여부 등
Pipeline
파이프라인에서는 수집된 데이터를 처리하는 로직을 정의한다.
데이터를 저장하거나 후처리 하는 등의 작업이 해당된다.
class SamplePipeline:
def process_item(self, item, spider):
# 데이터 처리 코드
return item
Setting
settings.py
에서 Spider의 동작을 설정한다.
파이프라인 활성화, 동시 요청 수 조정 등 다양한 설정을 변경할 수 있다.
크롤링 진행
모든 준비가 끝났으면, scrapy crawl project_name
커맨드로 크롤링을 진행할 수 있다.

Scrapy
Scrapy는 BeautifulSoup 처럼 단순히 HTML 또는 XML 문서를 파싱하기 위한 라이브러리가 아니라,
웹 스크래핑과 크롤링을 위해 설계된 종합적인 도구
이다.
비동기 처리, 분산 처리, 내장 파이프라인 등의 특징으로 작업을 효율적으로 처리할 수 있다.
또한, 자동으로 해당 웹사이트의 robots.txt
를 파싱하여 규칙을 준수한다는 장점이 있다.
Scrapy 아키텍처

- Scheduler
- URL을 스크래핑할 순서를 제어
- Downloader
- 인터넷에서 웹페이지를 가져와 Spider에 전달
- Response
- Downloader가 가져온 웹페이지의 HTML 내용
- Spider
- Response를 처리하고 데이터를 추출하며 새로운 스크래핑 작업 생성
- Item Pipeline
- 추출한 데이터를 처리하고 저장하는데 사용
Scrapy 프로젝트
Scrapy 설치는 pip install scrapy
를 통해 간단하게 진행할 수 있다.
scrapy startproject project_name
설치 후, 위 커맨드를 통해 scrapy 프로젝트를 생성할 수 있다.
프로젝트 구조는 다음과 같다.
scrapy_project/ ├── scrapy.cfg └── scrapy_project ├── __init__.py ├── items.py # 아이템 정의 파일 ├── middlewares.py # 미들웨어 정의 파일 ├── pipelines.py # 아이템 파이프라인 정의 파일 ├── settings.py # 프로젝트 설정 파일 └── spiders └── __init__.py
Spider
spider
디렉토리 내부에 spider파일을 생성한다.
cd project_name/project_name/spiders scrapy genspider spider_name sample.com # scrapy genspider {이름} {크롤링할 사이트 도메인}
이렇게 생성된 Spider 파일은 다음과 같다.
import scrapy class SampleSpider(scrapy.Spider): name = "sample_spider" allowed_domains = ["sample.com"] start_urls = ["https://sample.com"] def parse(self, response): # 데이터 추출 로직
Item
Scrapy의 Item은 수집할 데이터의 모델을 정의한다. 예를 들어, 제목과 설명을 추출하려는 경우 다음과 같이 Item을 정의할 수 있다.
# items.py import scrapy class SampleItem(scrapy.Item): title = scrapy.Field() description = scrapy.Field()
Field
특정 데이터 조각을 저장하는 key-value 쌍
각각의 Field는 웹 페이지에서 추출한 데이터의 특정 부분에 대응한다.
단순 데이터 저장 뿐 아니라,meta
인자로 각 필드의 특성을 세밀하게 설정 가능
ex. 기본값 설정, 필수 필드 여부 등
Pipeline
파이프라인에서는 수집된 데이터를 처리하는 로직을 정의한다.
데이터를 저장하거나 후처리 하는 등의 작업이 해당된다.
class SamplePipeline: def process_item(self, item, spider): # 데이터 처리 코드 return item
Setting
settings.py
에서 Spider의 동작을 설정한다.
파이프라인 활성화, 동시 요청 수 조정 등 다양한 설정을 변경할 수 있다.
크롤링 진행
모든 준비가 끝났으면, scrapy crawl project_name
커맨드로 크롤링을 진행할 수 있다.