본문 바로가기
공부기록/파이썬

Scrapy & MongoDB(크롤링한 데이터 MongoDB에 저장하는 방법 & MongoDB 선택한 이유)

by 책읽는 개발자 ami 2023. 6. 28.
728x90
반응형

1. MongoDB 파이썬 드라이버 설치

  • 크롤링 프로젝트의 가상환경에 pymongo 패키지를 설치합니다
    pip install pymongo

2. MongoDB 설정

  • MongoDB 서버가 실행 중이어야 합니다. 로컬 머신에 MongoDB가 설치되어 있지 않은 경우, 공식 MongoDB 웹사이트에서 MongoDB Community Edition을 다운로드하고 설치합니다.
  • MongoDB 서버가 실행 중인 호스트 및 포트 정보를 기억해두어야 합니다.

3. Scrapy 설정 파일 수정

  • Scrapy 프로젝트의 settings.py 파일을 열고 다음과 같이 설정을 추가합니다
MONGODB_URI = 'mongodb://localhost:27017/'  # MongoDB 서버 호스트 및 포트 정보 입력
MONGODB_DATABASE = 'your_database_name'  # 사용할 MongoDB 데이터베이스 이름

ITEM_PIPELINES = {
    'your_project_name.pipelines.MongoDBPipeline': 300,  # 파이프라인 우선순위 설정
}

4. Scrapy 파이프라인 구현

  • Scrapy 파이프라인을 사용하여 MongoDB에 데이터를 저장하는 파이프라인을 구현합니다.
  • Scrapy 프로젝트의 pipelines.py 파일을 열고 다음과 같이 파이프라인을 작성합니다.
import pymongo

class MongoDBPipeline:
    collection_name = 'tickets'  # MongoDB에 저장할 컬렉션 이름

    def __init__(self, mongodb_uri, database_name):
        self.mongodb_uri = mongodb_uri
        self.database_name = database_name

    @classmethod
    def from_crawler(cls, crawler):
        mongodb_uri = crawler.settings.get('MONGODB_URI')  # Scrapy 설정에서 MongoDB URI 가져오기
        database_name = crawler.settings.get('MONGODB_DATABASE')  # Scrapy 설정에서 MongoDB 데이터베이스 이름 가져오기
        return cls(mongodb_uri, database_name)

    def open_spider(self, spider):
        self.client = pymongo.MongoClient(self.mongodb_uri)
        self.db = self.client[self.database_name]  # 데이터베이스 선택

    def close_spider(self, spider):
        self.client.close()

    def process_item(self, item, spider):
        self.db[self.collection_name].insert_one(dict(item))
        return item

 
크롤링한 데이터과 MongoDB와 같이 NoSQL 데이터베이스 시스템을 사용하면 좋은 이유는 아래와 같다.

  1. 유연한 스키마: NoSQL 데이터베이스는 스키마가 고정되어 있지 않아 데이터 구조를 유연하게 변경할 수 있습니다. 크롤링 작업은 다양한 형식의 데이터를 가져올 수 있으며, 이러한 데이터를 유연하게 저장하기에 적합합니다.
  2. 확장성: NoSQL 데이터베이스는 수평적으로 확장 가능한 아키텍처를 가지고 있습니다. 크롤링은 대량의 데이터를 수집하므로, 이러한 데이터를 처리하고 저장하기 위해 확장성이 중요합니다. NoSQL 데이터베이스는 분산 아키텍처를 활용하여 대량의 데이터를 처리하고 저장할 수 있습니다.
  3. 비정형 데이터 지원: 크롤링한 데이터는 종종 비정형 형식을 가지며, 관계형 데이터베이스에 저장하기에는 적합하지 않을 수 있습니다. NoSQL 데이터베이스는 비정형 데이터를 유연하게 저장하고 쿼리할 수 있는 기능을 제공하여 크롤링 데이터의 저장과 처리를 용이하게 합니다.
  4. 분산 데이터 처리: 크롤링 작업은 여러 웹 페이지에서 데이터를 수집하는 작업입니다. NoSQL 데이터베이스는 분산 데이터 처리를 지원하여 크롤링한 데이터를 효율적으로 처리하고 병렬로 작업할 수 있습니다.
  5. 빠른 읽기 및 쓰기 성능: NoSQL 데이터베이스는 특정 작업에 최적화된 구조를 가지고 있으며, 데이터를 빠르게 쓰고 읽을 수 있습니다. 크롤링한 데이터는 실시간으로 업데이트되는 경우가 많으므로 빠른 읽기 및 쓰기 성능은 중요합니다.
  6. 확장된 쿼리 기능: NoSQL 데이터베이스는 다양한 쿼리 기능을 제공합니다. 크롤링한 데이터를 쿼리하여 필요한 정보를 추출하고 필터링할 수 있습니다.
  7. 클라우드 호환성: 많은 NoSQL 데이터베이스 시스템은 클라우드 환경에서 원활하게 실행될 수 있도록 설계되었습니다. 크롤링 작업은 대량의 데이터를 다루기 때문에 클라우드 기반 NoSQL 데이터베이스는 확장성과 유연성을 제공하는데 도움이 될 수 있습니다.

출처: ChatGPT

728x90
반응형