본문 바로가기
개발(Develop)/데이터베이스(DB)

데이터베이스(DB)/ mongoDB 데이터베이스 데이터 조작하기/ 파이썬 pymongo insert, find, update 활용하기/ 크롤링한 데이터 관리

by 왁왁s 2021. 6. 4.

 

이전 글에서는 네이버 영화 순위를 크롤링 하여 mongoDB 데이터베이스에

삽입하는 것을 해보았다면 이제는 mongoDB에 있는 데이터를

우리가 활용하는 것을 해보려고 한다.

 

그러면 우선, 네이버 영화 순위 홈페이지에서 영화 순위, 영화 제목, 영화 평점과 같이

필요한 정보들만 크롤링하여 데이터베이스에 넣는 작업까지 완료가 된 상태여야 한다.

 

이전 글을 참고해서 작업을 완료하고 해당 글을 읽자. ▼

데이터베이스(DB)/ 파이썬으로 네이버 영화순위 크롤링한 데이터를 DB에 넣기/ 몽고DB에 데이터 삽입하기(insert)

 

데이터베이스(DB)/ 파이썬으로 네이버 영화순위 크롤링한 데이터를 DB에 넣기/ 몽고DB에 데이터 삽

크롤링한 데이터들을 데이터베이스에 수집해보기 이전에 우리가 '네이버 영화 순위 사이트'를 크롤링을 해본 적이 있는데, 이번에는 크롤링을 해서 그냥 출력해보는 것이 아니라 가져온 데이터

parkjh7764.tistory.com


그러면 Robo 3T를 확인하였을 때 아래와 같이 데이터베이스에

영화 관련 데이터들이 들어가 있어야 한다.


원하는 영화의 평점 가져오기

 


여러 영화 중 내가 보고자 하는 영화의 평점을 보고 싶을 때,

데이터베이스로부터 평점을 가져오는 것을 해보자.

데이터베이스로부터 데이터를 가져올 때는 pymongo 라이브러리를 사용해야 한다.

그리고 명령어가 있는데, 그것은 아래 글에서 찾아 직접 활용해보자.

 

파이썬(Python)으로 몽고DB 조작하기/ pymongo 라이브러리로 데이터베이스 조작하기

 

데이터베이스(DB)/ 파이썬(Python)으로 몽고DB 조작하기/ pymongo 라이브러리로 데이터베이스 조작하

데이터베이스 mongoDB(몽고DB)를 파이썬으로 조작하기 파이썬으로 몽고DB를 다루기 위해서는 'pymongo' 라는 파이썬 패키지를 설치해주어야 한다. 만약 파이썬 코드를 작성하는 IDE '파이참(Pycharm)'이

parkjh7764.tistory.com


윗 글을 참고했다면 어느 명령어를 사용해야 하는지 알 수 있을 것이다.

바로 find 명령을 사용한다.

 

내가 원하는 영화 하나의 평점을 가지고 오는 것이기 때문에

find 보다는 find_one을 사용한다.

 

만약 영화 중에서 '타이타닉'이라는 영화가 감동깊었는데

해당 영화의 평점이 궁금할 때, 타이타닉이라는 영화의 평점을 가져오는 코드를 작성해보자.

 

우선 pymongo라는 라이브러리를 사용하기 위해

코드 상단에 임포트를 해주어야 한다.

from pymongo import MongoClient
client = MongoClient('localhost', 27017)
db = client.dbhwanE
find_one으로 영화 평점 데이터 가져오기

그리고 find_one 명령어를 사용해준다.

from pymongo import MongoClient
client = MongoClient('localhost', 27017)
db = client.dbhwanE

want_point = db.movies.find_one({"title":"타이타닉"})["point"]
print(want_point)

결과를 확인해보면

mongoDB 데이터베이스에 있는 

37위의 타이타닉 평점을 정상적으로 가져온 것을 볼 수 있다.


더 나아가

타이타닉 영화가 재밌었는데, 이렇게 재밌는 영화의 평점이 '9.36'인데,

9.36 평점을 받은 또 다른 영화는 무엇이 있는지 궁금하다고 가정했을 때

 

해당 영화와 같은 평점의 영화들을 출력해보자.

 

find로 같은 평점의 영화들 출력해보기

타이타닉과 같은 영화'들을' 출력하는 것이니 find_one이 아닌 find를 사용하여야 한다.

그리고 '조건'을 적용하는데, 조건은 '타이타닉 영화와 같은 평점'이다.

 

그러면 조건으로 걸러진 결과 값은 평점이 9.36인 영화들이 출력되어야 한다.

 

완성된 코드는 아래와 같다.

from pymongo import MongoClient
client = MongoClient('localhost', 27017)
db = client.dbhwanE

target_point = db.movies.find_one({"title":"타이타닉"})["point"]
same_movie = list(db.movies.find({"point":target_point},{"_id":False}))

for same in same_movie:
    print(same["title"])

target_point 변수를 두어 타이타닉의 평점을 변수에 넣도록 하였고,

find 명령어로 평점이 타이타닉과 같은 영화들을 리스트 형태로 가져오는데, 

_id 값은 제외하고 가져온다는 조건을 걸었다.

 

for 반복문을 돌려 same_movie 변수로 가져온 데이터들의

제목만 출력하도록 하였다.

 


조금 더 나아가 

타이타닉 영화를 봤는데 너무 내 취향도 아니고, 재미도 없어서

평점을 '0'점으로 만들어버리고 싶다고 가정했을 때

 

데이터베이스에서 타이타닉 영화의 평점을 0으로 만드는 것을 해보자.

 

update_one 명령어로 영화 평점 바꿔보기

이는 pymongo 라이브러리의 update_one 명령어를

사용할 줄만 안다면 쉽게 해결할 수 있다.

 

바로 코드로 보자.

from pymongo import MongoClient
client = MongoClient('localhost', 27017)
db = client.dbhwanE

db.movies.update_one({"title":"타이타닉"},{"$set":{"point":0}})

실행을 하고 Robo 3T를 통해 타이타닉을 찾았을 때

평점이 0으로 바뀐 것을 확인할 수 있다. 


여기서 뭔가 이상하거나 다른 점을 찾을 수 있을 것이다.

궁금증이 생겼는데, 이름이나 숫자 옆에 " " 큰따옴표와 # 샵 기호이다.

 

답을 말하자면 " "는 문자열 형태의 데이터를 뜻하고

#은 숫자 값 데이터를 뜻한다.

 

그런데, 데이터베이스를 다룰 때에는 데이터의 타입을 

통일하는 것이 관리하기에도 쉽다

 

그렇다면 숫자 0을 넣을 때 문자열로 바꾸어 넣어주면 된다.

from pymongo import MongoClient
client = MongoClient('localhost', 27017)
db = client.dbhwanE

db.movies.update_one({"title":"타이타닉"},{"$set":{"point":"0"}})

 

그러면 다른 데이터 값과 같게 문자열로 삽입된 것을 확인할 수 있다.

댓글