본문 바로가기
파이썬/[파이썬을 활용한 웹 크롤링 완벽 가이드]

📌 5. Scrapy 프레임워크를 활용한 크롤링

by 배불뚝 아저씨 2025. 2. 12.
반응형

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)
  • 크롤링 자동화 및 스케줄링
반응형

댓글