스파르타/웹개발
22.02.02 DB개괄, pymongo로 DB 조작하기, 웹스크래핑 결과 이용하기
h.단디
2022. 2. 2. 10:35
mongoDB는 눈에 보이지 않지만 작동되고 있음
그걸 시각화해서 볼 수 있게 하는 프로그램이 robo3T
데이터 베이스의 목적은 단순 보관이 아니라 잘 활용하기 위해서임
SQL - 엑셀에 가까움. 열,행을 미리 정해놔야 함. (공란으로라도 채워짐) 중간에 수정하기가 힘들다는 단점이 있으나, 데이터가 일관적이기때문에 분석하기 용이함.
NoSQL(Not only SQL) - 딕셔너리 형태. 데이터 하나하나가 다 다르기 때문에 유연함. 스타트업, 초기 단계에서 많이 채택.
파이썬으로 DBmongo 사용하려면? 'pymongo' 라이브러리 설치
#pymongo 기본코드
from pymongo import MongoClient #pymongo 쓰겠습니다.
client = MongoClient('localhost', 27017) #내 컴퓨터에서 돌아가고 있는 mongoDB에 접속할거예요.
db = client.dbsparta #dbsparta라고하는 DB이름으로 접속할겁니다.(그 이름이 없으면 자동으로 mongoDB에 생김)
insert
doc = {'name':'bobby','age':21} #mongoDB는 NoSQL! 딕셔너리 형태로 데이터 만듬.
db.users.insert_one(doc) #users라는 콜렉션에 저 딕셔너리 형태 데이터를 넣을거임
find (여러개 찾기)
same_ages = list(db.users.find({'age':21},{'_id':False})) #21살인 사람 찾아서 _id없이 뽑아줘 / 모든 데이터 가져올 땐 '{}'로!
print(same_ages)
find_one (같은 데이터가 여러개 있어도 가장 상단의 하나만 가져옴)
user = db.users.find_one({'name':'bobby'})
print(user)
update
보통 복붙해서 씀. 콜렉션 이름이 맞는지 확인 필!
update_many로 해당하는 전체 데이터를 바꿀 수도 있으나, 위험하기 때문에 비추함.
db.users.update_one({'name':'bobby'},{'$set':{'age':19}}) #name이 bobby인 애를 찾아서 age를 19로 바꿔라
delete
아마도 잘 쓸 일 없을 거임
마찬가지로 delete_many가 있으나 위험하니까 쓰지마
db.users.delete_one({'name':'bobby'})
앞에서 한 네이버무비 크롤링 서버에 데이터 넣기
import requests
from bs4 import BeautifulSoup
from pymongo import MongoClient
client = MongoClient('localhost', 27017)
db = client.dbsparta
headers = {'User-Agent' : 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36'}
data = requests.get('https://movie.naver.com/movie/sdb/rank/rmovie.nhn?sel=pnt&date=20200303',headers=headers)
soup = BeautifulSoup(data.text, 'html.parser')
trs = soup.select('#old_content > table > tbody > tr')
for tr in trs :
a_tag = tr.select_one('td.title > div > a')
if a_tag is not None :
rank = tr.select_one('td:nth-child(1) > img')['alt']
title = a_tag.text
star = tr.select_one('td.point').text
doc = {
'rank' : rank,
'title' : title,
'star' : star
}
db.movies.insert_one(doc)
quiz1. '매트릭스' 별점 가져오기
from pymongo import MongoClient
client = MongoClient('localhost', 27017)
db = client.dbsparta
movie = db.movies.find_one({'title':'매트릭스'})
print(movie['star'])
quiz2.'매트릭스'의 평점과 같은 평점 영화 제목들 가져오기
from pymongo import MongoClient
client = MongoClient('localhost', 27017)
db = client.dbsparta
movie = db.movies.find_one({'title':'매트릭스'})
target_star = movie['star']
target_movies = list(db.movies.find({'star':target_star},{'_id':False}))
for target in target_movies: #그냥 print(target_movies)해도 되지만 결과가 눈에 보기 쉽게 반복문 활용
print(target['title'])
quiz3.매트릭스 영화 평점 0점 만들기
from pymongo import MongoClient
client = MongoClient('localhost', 27017)
db = client.dbsparta
db.movies.update_one({'title':'매트릭스'},{'$set':{'star':'0'}}) #robo3T에서 확인해보니 다른 애들은 문자열임. 따라서 문자열 형태로 넣어줌.(나중에 관리 용이하도록)
Robo3T에서 ""은 문자열, #은 숫자