▶현재 시간 : 2022년 10월 18일 15:21 P.M.
사실 어제 4주차 공부하면서 개념정리가 안되서 따라쓰는 코딩같은 느낌이 들어 3주차 다시 복습 중이다. 개념정리 더 하고 연습 더 하면 좋아질꺼야!
▶DB란?
👉 (뜬금) 우리가 방 정리를 하는 이유는 무엇일까요?
- 1번: 잘 넣어두기 위해서 / 2번: 나중에 잘 찾기 위해서
👉 (뜬금2) 한가지 더! 교보문고에 가서 책을 찾는 다고 하면?
- 꽂혀진 방법대로 찾아야 쉽게 찾을 수 있겠죠! 😎 (섹션 → 출판사 → 책 제목)
- 우리 눈에 보이진 않지만, 사실 DB에는 Index 라는 순서로 데이터들이 정렬되어 있답니다!
데이터베이스는 구조화된 정보 또는 데이터의 조직화된 모음으로서 일반적으로 컴퓨터 시스템에 전자적으로 저장됩니다 데이터베이스는 일반적으로 데이터베이스 관리 시스템(DBMS)에 의해 제어됩니다. 연결된 애플리케이션과 함께 데이터와 DBMS를 하나로 묶어 데이터베이스 시스템이라고 하며 단축하여 데이터베이스라고도 합니다.
오늘날 운영되고 있는 가장 일반적인 유형의 데이터베이스에서 데이터는 일반적으로 처리 및 데이터 쿼리를 효율적으로 수행하기 위해 일련의 테이블에서 행과 열로 모델링됩니다. 그러면 데이터에 쉽게 액세스하고 관리, 수정, 업데이트, 제어 및 구성할 수 있습니다. 대부분의 데이터베이스는 데이터 작성 및 쿼리에 SQL(Structured Query Language)을 사용합니다.
▶DB의 두 가지 종류
- RDBMS(SQL)
행/열의 생김새가 정해진 엑셀에 데이터를 저장하는 것과 유사합니다. 데이터 50만 개가 적재된 상태에서, 갑자기 중간에 열을 하나 더하기는 어려울 것입니다. 그러나, 정형화되어 있는 만큼, 데이터의 일관성이나 / 분석에 용이할 수 있습니다. ex) MS-SQL, My-SQL 등
- No-SQL
딕셔너리 형태로 데이터를 저장해두는 DB입니다. 고로 데이터 하나 하나 마다 같은 값들을 가질 필요가 없게 됩니다. 자유로운 형태의 데이터 적재에 유리한 대신, 일관성이 부족할 수 있습니다. ex) MongoDB
▶pymongo로 mongoDB 조작하기
- DB연결하기 & 데이터 넣기
# 'users'라는 collection에 {'name':'bobby','age':21}를 넣습니다.
db.users.insert_one({'name':'bobby','age':21})
db.users.insert_one({'name':'kay','age':27})
db.users.insert_one({'name':'john','age':30})
- 모든 결과 값을 보기
# 모든 데이터 뽑아보기
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)
- 특정 결과 값을 뽑아 보기
user = db.users.find_one({'name':'bobby'})
print(user)
- 수정하기
# 오타가 많으니 이 줄을 복사해서 씁시다!
db.users.update_one({'name':'bobby'},{'$set':{'age':19}})
user = db.users.find_one({'name':'bobby'})
print(user)
- 삭제하기 (거의 안 씀)
db.users.delete_one({'name':'bobby'})
user = db.users.find_one({'name':'bobby'})
print(user)
- pymongo 코드 요약
from pymongo import MongoClient
import certifi
ca = certifi.where()
client = MongoClient('mongodb+srv://test:sparta@cluster0.oqyeqew.mongodb.net/Cluster0?retryWrites=true&w=majority', tlsCAFile=ca)
db = client.dbsparta
# 저장 - 예시
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'})
▶웹스크래핑 결과를 DB에 저장하기
- pymongo 기본 세팅
아래 코드를 넣기 (전체 코드에서 위치 참조!)
from pymongo import MongoClient
import certifi
ca = certifi.where()
client = MongoClient('mongodb+srv://test:sparta@cluster0.oqyeqew.mongodb.net/Cluster0?retryWrites=true&w=majority', tlsCAFile=ca)
db = client.dbsparta
- 도큐먼트 만들어 하나씩 insert 하기
아래 코드 넣기(전체 코드에서 위치 참조!)
doc = {
'title': title,
'rank': rank,
'star': star
}
db.movies.insert_one(doc)
- 전체 코드
import requests
from bs4 import BeautifulSoup
from pymongo import MongoClient
import certifi
ca = certifi.where()
client = MongoClient('mongodb+srv://test:sparta@cluster0.oqyeqew.mongodb.net/Cluster0?retryWrites=true&w=majority', tlsCAFile=ca)
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.naver?sel=pnt&date=20210829',headers=headers)
soup = BeautifulSoup(data.text, 'html.parser')
movies = soup.select('#old_content > table > tbody > 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)
doc = {
'title': title,
'rank': rank,
'star': star
}
db.movies.insert_one(doc)
'Web development (3)' 카테고리의 다른 글
웹개발 3주차 (5) - 웹스크래핑(크롤링) 연습 (0) | 2022.10.18 |
---|---|
웹개발 3주차 (3) - 웹스크래핑(크롤링) 기초 (0) | 2022.10.18 |
웹개발 3주차 (2) - requests (0) | 2022.10.18 |
웹개발 3주차 (1) - Python기초 문법 (0) | 2022.10.18 |