+ 개발

Scrapy를 이용한 웹 크롤링

AI.Logger 2024. 8. 16. 00:05
  • 수업 내용 리마인드 및 아카이빙 목적의 업로드

"Image generated using DALL-E by OpenAI"


 

Scrapy는 파이썬 기반의 웹 크롤링 프레임워크로, 효율적이고 빠르게 웹 데이터를 수집할 수 있는 다양한 기능을 제공합니다.

 

1. Scrapy란?

 

Scrapy는 웹 크롤링을 쉽게 할 수 있도록 돕는 파이썬 기반의 프레임워크입니다. 프레임워크란 개발자가 특정 애플리케이션이나 솔루션을 개발할 때 반복적으로 사용되는 패턴, 기능, 구조 등을 제공하여 개발 과정을 단순화하고 표준화하는 역할을 합니다.

Scrapy를 사용하면 크롤링을 안정적으로, 그리고 빠르게 수행할 수 있으며, 동시 크롤링 기능과 다양한 크롤링 관련 기능을 제공합니다.

 

2. Scrapy의 주요 개발 순서

 

Scrapy를 사용해 웹 크롤링을 시작하려면 다음과 같은 순서를 따릅니다:

  • 1) Items 정의: 수집할 데이터 항목을 정의합니다. 예를 들어, 뉴스 기사의 날짜, 제목, 본문 등이 아이템이 됩니다.
  • 2) Start URL 지정: 크롤링을 시작할 URL을 설정합니다. start_requests 또는 start_urls를 사용하여 지정할 수 있습니다.
  • 3) Callback 함수 정의: 지정된 URL에 접속하면 실행될 콜백 함수를 정의합니다. 이 함수는 URL의 응답을 받아 처리하고, 필요한 데이터를 선택합니다.
  • 4) Pipeline 사용: 수집된 데이터를 필터링하거나 저장하는 등의 추가 작업을 수행할 수 있습니다.

 

3. Scrapy 설치 및 시작하기

 

Scrapy를 설치하고 프로젝트를 시작하려면 다음과 같은 명령어를 사용합니다.

pip install scrapy  # Scrapy 설치
scrapy startproject [프로젝트이름]  # 새 Scrapy 프로젝트 생성
scrapy genspider [스파이더이름] [크롤링할 URL]  # 스파이더 생성

스파이더는 웹사이트에서 데이터를 추출하는 역할을 하는 사용자 정의 크롤러입니다. 이를 통해 지정된 웹사이트를 탐색하고, 원하는 데이터를 수집할 수 있습니다.

 

4. Selector를 사용한 데이터 추출

 

Scrapy에서는 CSS Selector와 XPath를 사용해 웹 페이지에서 데이터를 추출할 수 있습니다. Selector는 BeautifulSoup의 soup.select()와 유사한 역할을 합니다.

  • response.css(): CSS 선택자를 사용해 데이터를 가져옵니다.
  • response.xpath(): XPath 선택자를 사용해 데이터를 가져옵니다.
  • response.css("::text").get(): 태그 안의 텍스트를 가져옵니다.
  • response.css("::attr(id)").get(): 특정 속성 값을 가져옵니다.

이러한 메소드를 활용해 필요한 데이터를 효과적으로 추출할 수 있습니다.

 

5. Pipeline을 통한 데이터 처리

 

Scrapy는 Pipeline을 통해 크롤링한 데이터를 후처리할 수 있는 기능을 제공합니다. 필터링, 클렌징 등의 작업을 통해 데이터를 정제하거나, 불필요한 데이터를 제거할 수 있습니다.

class StudyPipeline:
    def process_item(self, item, spider):
        # 데이터 필터링 및 클렌징 코드
        return item

이렇게 정의된 파이프라인은 settings.py 파일에서 설정하여 사용합니다.