1. 이전 강의 리뷰
이전 강의에서는 크롤링한 데이터를 정제하고 저장하는 방법을 배웠습니다. 다음과 같은 개념을 다뤘습니다.
- pandas를 활용한 데이터 정제 (중복 제거, 공백 정리, 정규 표현식 활용)
- CSV 및 JSON 파일 저장 방법
- SQLite 데이터베이스 저장 (심화 강의 예정)
이번 강의에서는 Scrapy 프레임워크를 활용한 대량 데이터 크롤링을 배워보겠습니다. Scrapy는 강력한 웹 크롤링 프레임워크로, 빠르고 효율적으로 데이터를 수집할 수 있도록 도와줍니다.
2. Scrapy란?
Scrapy는 대규모 웹 크롤링을 수행할 수 있는 강력한 프레임워크로, 여러 페이지를 자동으로 탐색하며 데이터를 추출할 수 있습니다.
✅ Scrapy의 주요 기능
- 비동기 크롤링: 여러 웹페이지를 동시에 크롤링하여 속도를 최적화
- Spider 구조: 각 크롤러(Spider)를 독립적으로 관리 가능
- Pipeline을 통한 데이터 처리: 크롤링 후 데이터 정제 및 저장 자동화
- Middleware 지원: 크롤링을 더욱 유연하게 수행 가능 (User-Agent 변경, 프록시 설정 등)
3. Scrapy와 BeautifulSoup/Selenium 비교
기능 Scrapy BeautifulSoup Selenium
크롤링 속도 | 빠름 (비동기 지원) | 느림 (동기 방식) | 느림 (브라우저 렌더링 필요) |
JavaScript 실행 | 기본적으로 지원하지 않음 | 지원 안됨 | 지원 (브라우저 자동화) |
대량 데이터 크롤링 | 매우 적합 | 적합 | 비효율적 |
복잡한 상호작용 | 어려움 (추가 설정 필요) | 불가능 | 가능 (클릭, 입력 가능) |
사용 난이도 | 다소 어려움 | 쉬움 | 중간 |
Scrapy는 대량의 정적 데이터 크롤링에 최적화되어 있으며, BeautifulSoup은 간단한 정적 웹페이지 크롤링에 적합합니다. 반면 Selenium은 로그인, 폼 입력, JavaScript 실행이 필요한 경우 유용하지만 속도가 느립니다.
4. Scrapy 설치 및 프로젝트 생성
Scrapy를 사용하려면 먼저 라이브러리를 설치해야 합니다.
✅ Scrapy 설치
pip install scrapy
✅ Scrapy 프로젝트 생성
Scrapy 프로젝트를 생성하려면 터미널에서 다음 명령어를 실행합니다.
scrapy startproject my_scraper
이 명령어를 실행하면 my_scraper라는 Scrapy 프로젝트 폴더가 생성됩니다.
✅ Scrapy 프로젝트 구조 및 역할
Scrapy 프로젝트를 생성하면 다음과 같은 폴더 구조가 생성됩니다.
my_scraper/
scrapy.cfg # 프로젝트 설정 파일
my_scraper/
__init__.py # 패키지 인식용
items.py # 크롤링한 데이터를 저장할 구조 정의
middlewares.py # 크롤링 중간 처리 (User-Agent 변경, 프록시 설정 등)
pipelines.py # 크롤링한 데이터를 정제 및 저장
settings.py # Scrapy 설정 파일 (딜레이 설정, 저장 방식 변경 등)
spiders/ # 크롤러(Spider) 저장 폴더
news.py # Spider(거미) 크롤러 정의 파일
5. Scrapy 최종 크롤링 예제 (뉴스 기사 수집)
이제 Scrapy를 이용해 실전 크롤링을 진행해보겠습니다.
🔹 1단계: Spider(거미) 생성
cd my_scraper
scrapy genspider news news.ycombinator.com
이제 spiders/news.py 파일이 생성됩니다.
🔹 2단계: Spider 코드 작성 (news.py)
import scrapy
class NewsSpider(scrapy.Spider):
name = "news"
allowed_domains = ["news.ycombinator.com"]
start_urls = ["https://news.ycombinator.com/"]
def parse(self, response):
for article in response.css(".athing"):
yield {
"title": article.css("a.storylink::text").get(),
"url": article.css("a.storylink::attr(href)").get(),
}
🔹 3단계: 크롤링 실행 및 데이터 저장
scrapy crawl news -o news.json
위 명령어를 실행하면 news.json 파일에 크롤링된 뉴스 제목과 링크가 저장됩니다.
6. Scrapy Pipeline을 활용한 데이터 정제 및 저장
Scrapy는 크롤링한 데이터를 자동으로 정제 및 저장할 수 있도록 Pipeline 기능을 제공합니다.
🔹 Scrapy Pipeline 설정 (pipelines.py)
import pandas as pd
class NewsPipeline:
crawled_data = []
def process_item(self, item, spider):
item["title"] = item["title"].strip()
self.crawled_data.append(item)
return item
def close_spider(self, spider):
df = pd.DataFrame(self.crawled_data)
df.to_csv("news_data.csv", index=False, encoding="utf-8-sig")
✅ Pipeline 활성화 (settings.py)
ITEM_PIPELINES = {
'my_scraper.pipelines.NewsPipeline': 300,
}
✅ Pipeline이 적용된 크롤링 실행 예제
scrapy crawl news
이제 크롤링이 완료되면 news_data.csv 파일에 정제된 뉴스 데이터가 자동으로 저장됩니다.
🎯 이번 강의를 마치며
Scrapy는 우리가 지금까지 배운 크롤링 기법들을 더 효율적이고 빠르게 수행할 수 있도록 도와주는 프레임워크입니다. 이번 강의에서는 Scrapy의 기본적인 개념과 사용 방법을 배웠습니다.
- Scrapy 프로젝트 생성 및 구조 이해
- 각 파일들의 역할과 활용법 설명
- Spider를 활용한 크롤링 및 데이터 저장
- Pipeline을 활용한 데이터 정제 및 저장
- BeautifulSoup, Selenium과의 비교
Scrapy는 대량의 데이터를 빠르게 수집할 수 있는 강력한 도구입니다. 다음 강의에서는 Scrapy를 활용한 실전 프로젝트를 진행하면서 더 깊이 있는 활용법을 익혀보겠습니다! 🚀
🚀 다음 강의 예고
6부: Scrapy를 활용한 실전 프로젝트
- 특정 뉴스 사이트 크롤링 프로젝트
- Scrapy Middleware 활용 (User-Agent 변경, 프록시 사용)
- Scrapy 데이터베이스 저장 (MySQL, MongoDB)
- 크롤링 자동화 및 스케줄링
'파이썬 > [파이썬을 활용한 웹 크롤링 완벽 가이드]' 카테고리의 다른 글
📌 4. 크롤링 데이터 정제 및 저장하기 (2) | 2025.02.11 |
---|---|
📌 3. selenium을 이용한 동적 웹페이지 크롤링 (0) | 2025.02.10 |
📌 2. requests와 BeautifulSoup을 활용한 기초 크롤링 (0) | 2025.02.09 |
📌 1. 웹 크롤링 개요 및 환경 설정 (0) | 2025.02.08 |
댓글