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

Selenium + MongoDB 크롤링한 데이터 저장하기

by 책읽는 개발자 ami 2023. 7. 1.
728x90
반응형

파이썬에서 MongoDB에 리스트를 삽입하는 방법은 다음과 같습니다.

1. pymongo 라이브러리 설치

 pymongo는 파이썬에서 MongoDB를 다루는 데 사용되는 공식 MongoDB 드라이버입니다. 설치는 pip 명령어를 사용하여 다음과 같이 수행할 수 있습니다.

pip install pymongo

2. MongoDB 관련 클래스를 만듭니다.

from pymongo import MongoClient

class MongoDB:
    def __init__(self):
        # MongoDB에 연결
        self.client = MongoClient('localhost', 27017)

        # 데이터베이스 선택 (없는 경우 자동으로 생성됨)
        self.db = self.client['test']

        # 컬렉션 선택 (없는 경우 자동으로 생성됨)
        self.collection = self.db['c1']
    
    def insertMany(self, documents): #리스트
        print(documents)
        result = self.collection.insert_many(documents)
        # 삽입 결과 확인
        if result.acknowledged:
            print("Documents inserted successfully!")
            print("Inserted IDs:", result.inserted_ids)
        else:
            print("Failed to insert documents.")
    def insertOne(self, itm): #객체
        self.collection.insert_one(itm)
    def selectOne(self, id): #객체
        self.collection.find_one(id)
    def selectList(self, condition=None): #객체(조건)
        if condition is None:
            self.collection.find()
        else:
            self.collection.find(condition)
    def selectAll(self):
        self.collection.find()

위와 같이 클래스를 작성하고 셀레니움을 작성한 코드에서는 다음과 같이 불러올 수 있습니다.

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
import re
from mongo import MongoDB

#DB 연결
db = MongoDB()

# 웹 드라이버 설정
driver = webdriver.Chrome()

urls = ['http://example.com/a', 'http://example.com/b']

for url in urls:
    driver.get(url)
    # 특정 클래스가 로드될 때까지 기다리기
    wait = WebDriverWait(driver, 10)  # 최대 10초 동안 기다림
    if re.search('a', url):
        site = 'a'
        class_name = "c1"  # 기다릴 클래스 이름
        title_selector = '.title1'
        reg_selector = '.reg1'
    elif re.search('b', url):
        site = 'b'
        class_name = "c2"
        title_selector = '.title2'
        reg_selector = '.reg2'

    wrap = wait.until(EC.presence_of_element_located((By.CLASS_NAME, class_name)))

    # 리스트 찾기 
    sth_list = wrap.find_elements(By.TAG_NAME,'li')

    element = wait.until(EC.visibility_of_element_located((By.CSS_SELECTOR, title_selector)))
    ele_list = []
    if element:
        for ticket in ticket_list:
            ele = {}
            ele['site'] = site
            ele['title'] = ticket.find_element(By.CSS_SELECTOR, title_selector).text
            ele['reg_date'] = ticket.find_element(By.CSS_SELECTOR, reg_selector).text
            ele_list.append(ele)            
        # insert 함수 호출
        db.insertMany(ele_list)
        ele_list = []
# 웹 드라이버 종료
driver.quit()

위에서 작성한 클래스를 import 합니다.

from mongo import MongoDB

클래스를 호출하여 collection과 연결합니다.

db = MongoDB()

저장할 데이터를 list에 저장한 뒤 collection에 insert합니다.

db.insertMany(ele_list)
728x90
반응형