SW/MongoDB
MongoDB 기초
ahhyeon
2023. 3. 14. 18:15
1. pymongo로 DB조작하기
1-1. pymongo로 mongoDB 조작
- DB 연결 & 데이터 넣기
db.users.insert_one({'name':'bobby','age':21})
db.users.insert_one({'name':'kay','age':27})
db.users.insert_one({'name':'john','age':30})
- 모든 결과 값을 보기
- pymongo(find)
# 모든 데이터 뽑아보기
all_users = list(db.users.find({},{'_id':False}))
print(all_users[0]) # 0번째 결과값을 보기
print(all_users[0]['name']) # 0번째 결과값의 'name'을 보기
for user in all_users: # 반복문을 돌며 모든 결과값을 보기
print(user)
- 특정 결과 값을 뽑아 보기
- pymongo(find_one)
user = db.users.find_one({'name':'bobby'})
print(user)
- 수정하기
- ✔️pymongo(update_one)
db.users.update_one({'name':'bobby'},{'$set':{'age':19}})
user = db.users.find_one({'name':'bobby'})
print(user)
- 삭제하기(거의 사용x)
- ✔️pymongo(delete_one)
db.users.delete_one({'name':'bobby'})
user = db.users.find_one({'name':'bobby'})
print(user)
1-2. pymongo 코드 요약
# 저장
doc = {'name':'bobby','age':21}
db.users.insert_one(doc)
# 한 개 찾기
user = db.users.find_one({'name':'bobby'})
# 여러개 찾기( _id 값은 제외하고 출력)
all_users = list(db.users.find({},{'_id':False}))
# 바꾸기
db.users.update_one({'name':'bobby'},{'$set':{'age':19}})
# 지우기
db.users.delete_one({'name':'bobby'})
2. 웹크롤링 결과 저장
✏️ insert 사용 → 웹크롤링 결과를 DB에 저장하기!
- pymongo 기본 세팅
import requests
from bs4 import BeautifulSoup
from pymongo import MongoClient
client = MongoClient('mongodb://test:ahhyeon@ac-n9ccs4r-shard-00-00.arcitzi.mongodb.net:27017,ac-n9ccs4r-shard-00-01.arcitzi.mongodb.net:27017,ac-n9ccs4r-shard-00-02.arcitzi.mongodb.net:27017/?ssl=true&replicaSet=atlas-8qe01r-shard-0&authSource=admin&retryWrites=true&w=majority')
db = client.dbtest
# URL을 읽어서 HTML를 받아오기
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.naver?sel=pnt&date=20230312',headers=headers)
# 웹페이지 파싱하기
soup = BeautifulSoup(data.text, 'html.parser')
# select 이용, tr들 불러오기
movies = soup.select('#old_content > table > tbody > tr')
# movies(tr들)의 반복문
for movie in movies:
a = movie.select_one('td.title > div > a')
if a is not None:
title = a.text
rank = movie.select_one('td:nth-child(1) > img')['alt']
star = movie.select_one('td.point').text
print(rank, title, star)
- 도큐먼트 만들어 하나씩 insert 하기
import requests
from bs4 import BeautifulSoup
from pymongo import MongoClient
client = MongoClient('mongodb://test:ahhyeon@ac-n9ccs4r-shard-00-00.arcitzi.mongodb.net:27017,ac-n9ccs4r-shard-00-01.arcitzi.mongodb.net:27017,ac-n9ccs4r-shard-00-02.arcitzi.mongodb.net:27017/?ssl=true&replicaSet=atlas-8qe01r-shard-0&authSource=admin&retryWrites=true&w=majority')
db = client.dbtest
# URL을 읽어서 HTML를 받아오기
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.naver?sel=pnt&date=20230312',headers=headers)
# 웹페이지 파싱하기
soup = BeautifulSoup(data.text, 'html.parser')
# select 이용, tr들 불러오기
movies = soup.select('#old_content > table > tbody > tr')
# movies(tr들)의 반복문
for movie in movies:
a = movie.select_one('td.title > div > a')
if a is not None:
title = a.text
rank = movie.select_one('td:nth-child(1) > img')['alt']
star = movie.select_one('td.point').text
doc = {
'rank': rank,
'title' : title,
'star' : star
}
db.movies.insert_one(doc)
3. 웹크롤링 결과 이용하기
✏️ find, update 사용
3-1. 영화제목 '아바타 리마스터링'의 평점을 가져오기
target_movie = db.movies.find_one({'title':'아바타 리마스터링'})
print(target_movie['star'])
3-2. '아바타 리마스터링'의 평점과 같은 평점의 영화 제목들 가져오기
target_movie = db.movies.find_one({'title':'아바타 리마스터링'})
target_star = target_movie['star']
movies = list(db.movies.find({'star':target_star}))
for movie in movies:
print(movie['title'])
3-3. '아바타 리마스터링' 영화의 평점을 0으로 만들기
db.movies.update_one({'title':'아바타 리마스터링'},{'$set':{'star':'0'}})