이제 스크래핑한 데이터를 DB에 저장해 보도록 한다.
베이스 코드
import requests
from bs4 import BeautifulSoup
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(URL,headers=headers)
soup = BeautifulSoup(data.text, 'html.parser')
video_list = soup.select("#mainContent > div > div.box_ranking > ol > li")
for v in video_list:
# print(v)
rank = v.select_one(".rank_num").text
title = v.select_one(".tit_item").text.strip("\n")
rate = v.select_one(".txt_grade").text
print(rank, title, rate)
mongoDB에 연결하는 코드를 작성한다.
from pymongo import MongoClient
client = MongoClient('URL')
db = client.dbsparta
그리고 데이터를 딕셔너리 형태로 묶어준다음 DB로 데이터를 전송한다.
doc = {
'title': title,
'rank': rank,
'rate': rate
}
db.movies.insert_one(doc)
그리고 db 사이트에 접속해 보면 새로운 movies라는 그룹이 생긴 걸 볼 수 있고 그 안에는 내가 가져온 정보들이 저장되어 있다.
저장한 데이터 중에서 하나 골라서 가져와본다.
movie = db.movies.find_one({'title':'슈퍼 마리오 브라더스'})
print(movie)
저장했던 값이 그대로 잘 가져와진다.
이번에는 특정 영화의 특정 값과 동일한 영화를 가져오도록해본다.
movie = db.movies.find_one({'title':'슈퍼 마리오 브라더스'})
# 슈퍼 마리오 브라더스의 평점
target_star = movie['rate']
# 슈퍼 마리오 브라더스와 동일한 평점의 영화 가져오기
movies = db.movies.find({'rate' : target_star}, {'_id':False})
for a in movies:
print(a['title'])
두 개의 영화가 잘 들어오고 있다. 혹시나 해서 DB에서 확인해봤는데 올바른 데이터를 가져온것이 맞다.
이번엔 특정 영화의 평점을 변경해본다.
db.movies.update_one({'title' : '거울 속 외딴 성'}, {'$set':{'rate':0}})
값이 잘 변경되었다.
'스파르타 > Web' 카테고리의 다른 글
[Web] Flask 서버구현 - ( week 4 ) (0) | 2023.04.24 |
---|---|
[Web] 과제 (지니뮤직 크롤링) - ( week 3 ) (0) | 2023.04.20 |
[Web] MongoDB Atlas ( week 3 ) (0) | 2023.04.20 |
[Web] 데이터베이스 - ( week 3 ) (0) | 2023.04.20 |
[Web] 크롤링 - ( week 3 ) (0) | 2023.04.20 |