MongoDB + 웹 스크래핑

해롱그·2023년 7월 7일
0

데이터베이스

목록 보기
9/9

MongoDB

다양한 플랫폼에서 사용할 수 있는 NoSQL 타입의 데이터베이스 프로그램
JSON과 비슷한 형태로 자료를 정리하는 것이 특징!

MongoDB의 자료는 각각의 딕셔너리인 도큐먼트가 모여 컬렉션,
컬렉션이 모여 DB가 되는 형태

pymongo 로 mongoDB 조작하기

pymongo 라이브러리의 역할
MongoDB라는 프로그램을 조작하기 위해 특별한 라이브러리인 pymongo가 필요하다.

pymongo 패키지 설치

pip install pymongo

DB 연결 - 새 파이썬 파일을 만들어 아래 코드를 붙여넣기

from pymongo import MongoClient
client = MongoClient('localhost', 27017)
db = client.만들db명

# 아래에 코드 작성

데이터 넣기 - MongoDB에 insert 하기

# 'users'라는 collection에 {'name':'bobby','age':21} 외 2개를 넣습니다.
db.users.insert_one({'name':'bobby','age':21})
db.users.insert_one({'name':'kay','age':27})
db.users.insert_one({'name':'john','age':30})

DB 모든 결과 값 보기

from pymongo import MongoClient           # pymongo를 임포트 하기(패키지 인스톨 먼저 해야겠죠?)
client = MongoClient('localhost', 27017)  # mongoDB는 27017 포트로 돌아갑니다.
db = client.dbsparta                      # 'dbsparta'라는 이름의 db를 만듭니다.

# MongoDB에서 데이터 모두 보기
all_users = list(db.users.find({}))

# 참고! MongoDB에서 특정 조건의 데이터 모두 보기
same_ages = list(db.users.find({'age':21}))

print(all_users[0])         # 0번째 결과값을 보기
print(all_users[0]['name']) # 0번째 결과값의 'name'을 보기

for user in all_users:      # 반복문을 돌며 모든 결과값을 보기
    print(user)

특정 결과 값을 뽑아 보기

user = db.users.find_one({'name':'bobby'})
print(user)

특정 키 값을 제외하고 보기

user = db.users.find_one({'name':'bobby'},{'_id':False})
print(user)

수정하기

# db.db명.update_many({찾을조건},{'$set': {'바꿀컬럼명':'바꿀값'}})
db.users.update_one({'name':'bobby'},{'$set':{'age':19}})

삭제하기 - 거의 안씀...

db.users.delete_one({'name':'bobby'})

pymongo 사용법 요약 (삽입, 찾기, 수정, 삭제)

# 저장
doc = {'name':'bobby','age':21}
db.users.insert_one(doc)

# 한 개 찾기
user = db.users.find_one({'name':'bobby'})

# 여러개 찾기 - ( _id 값은 제외하고 출력)
same_ages = list(db.users.find({'age':21},{'_id':False}))

# 바꾸기
db.users.update_one({'name':'bobby'},{'$set':{'age':19}})

# 지우기
db.users.delete_one({'name':'bobby'})

웹 스크래핑 결과 DB에 저장하기

웹 스크래핑 코드

import requests
from bs4 import BeautifulSoup

# url을 읽어서 HTML을 받아오고,
url = ''
headers = {'User-Agent' : 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36'}
res = requests.get('url', headers=headers)

# HTML을 BeautifulSoup이라는 라이브러리를 활용해 검색하기 용이한 상태로 만듦
soup = BeautifulSoup(res.text, 'html.parser')

# select를 이용해서 tr들을 불러오기
movies = soup.select('#old_content > table > tbody > tr')

# movies(tr들)의 반복문을 돌리기
for movie in movies:
    a_tag = movie.select_one('td.title > div > a')
    # movie 안에 a가 있으면,
    if a_tag is not None:
        rank = movie.select_one('td:nth-child(1) > img')['alt'] # img 태그의 alt 속성값을 가져오기
        title = a_tag.text    # a 태그 사이의 텍스트를 가져오기
        star = movie.select_one('td.point').text    # td 태그 사이의 텍스트를 가져오기
        print(rank, title, star)

pymongo 기본 셋팅 코드

위 코드의 import 줄 아래에 붙여넣자

from pymongo import MongoClient		# pymongo import 하기 (그 전에 패키지 install 필수~)
client = MongoClient('localhost', 27017)	# mongoDB는 27017 포트로 돌아간다.
db = client.dbspart		# 'dbsparta'라는 이름의 db를 만든다!
profile
사랑아 컴퓨터해 ~

0개의 댓글