드디어 서버를 만들고 저장을 해본다.
정말 기초겠지만.. 설레는 순간이다.
1. 데이터 베이스(DB)를 쓰는 이유?
- 잘 넣고 잘 찾기 위해서
- 교보문고를 예를 들면 이해하기 쉽다.
서점은 각 카테고리별로 잘 정리가 되어있고 필요한 책을 뽑을 수 있도록 되어있다.
ex. 출판사, 제목, 분야 등등
2. 데이터 베이스(DB)의 종류
- 크게 2가지가 있음
👉 RDBMS(SQL)
행/열의 생김새가 정해진 엑셀에 데이터를 저장하는 것과 유사하다. 데이터 50만 개가 적재된 상태에서, 갑자기 중간에 열을 하나 더하기는 어렵지만 정형화되어 있는 만큼, 데이터의 일관성이나 / 분석에 용이
ex) MS-SQL, My-SQL 등
👉 No-SQL *초기 서비스나, 스타트업에서 많이 씀 -> 서비스의 변화가 많기 때문에
딕셔너리 형태로 데이터를 저장해두는 DB. 고로 데이터 하나 하나 마다 같은 값들을 가질 필요가 없게 되며 자유로운 형태의 데이터 적재에 유리한 대신, 일관성이 부족할 수 있다.
ex) MongoDB
3. mongoDB 시작하기
**주의** 지금 mongoDB 가입과 연결은 아래 내용과 조금 상이할 수 있습니다.
1) mongoDB - Atlas 가입하기가입하기
- 구글 로그인 → Accept Privacy ... Service 에 체크 → Submit
- 링크 : https://account.mongodb.com/account/register
Cloud: MongoDB Cloud
account.mongodb.com
2) 다음 화면 체크하고 넘어가기
3) Shared를 클릭하고 넘어가기
4) SEOUL로 체크하고, Create Cluster 클릭하기
5) 아래와 같은 화면이 잠시 동안 나온 뒤에
6) 새로고침 후 최종 아래와 같은 화면을 만나면 끝!
7) 연결 준비하기
- Allow Access from Anywhere 클릭 → Add IP address 클릭
- Username, Password를 아래와 같이 입력 → Create Database User 클릭
- Choose a connection method 클릭
- Username과 Pasword 설정
4. mongoDB 연결하기
1) 패키지 설치
- mongoDB 가입을 하고 파이참에서 pymongo와 dnspython 패키지를 설치해줘야한다.
-> monogDB라는 프로그램을 파이썬으로 조작하려면 pymongo 라이브러리가 필요!
2) 다시, mongoDB Atlas 화면에서 Connect your application 클릭
3) pymongo로 조작하기
- 기본 시작 코드가 있고 mongoDB의 연결링크를 넣어주면된 다.
Cluster0 부분이 처음엔 다른 명칭으로 되어있어서 꼭 변경을 해줬어야 한다!
또한 아이디와 비밀번호 부분도 개인이 설정한 것으로 변경 필요!
from pymongo import MongoClient
client = MongoClient('mongodb+srv://ID:PASSWORD@cluster0.1fgo8.mongodb.net/Cluster0?retryWrites=true&w=majority')
db = client.dbsparta
4) 연결 테스트 _ DB에 데이터 넣기
doc = {
'name':'jinyeol',
'age':33
}
db.users.insert_one(doc)
5. pymongo로 DB조작하기
- 5가지 기본 기능
1) 저장하기
doc = {'name':'bobby','age':21}
db.users.insert_one(doc)
2) 모든 결과 값 보기
# 모든 데이터 뽑아보기
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)
3) 특정 결과 값 보기
user = db.users.find_one({'name':'bobby'})
print(user)
4) 수정하기
# 오타가 많으니 이 줄을 복사해서 씁시다!
db.users.update_one({'name':'bobby'},{'$set':{'age':19}})
user = db.users.find_one({'name':'bobby'})
print(user)
5) 삭제하기 (거의 안씀)
db.users.delete_one({'name':'bobby'})
user = db.users.find_one({'name':'bobby'})
print(user)
6. pymongo로 DB조작하기
1) 네이버 영화 크롤링 내용 mongoDB에 저장하기
import requests
from bs4 import BeautifulSoup
from pymongo import MongoClient
client = MongoClient('mongodb+srv://aaaaaaaa@cluster0.1fgo8.mongodb.net/Cluster0?retryWrites=true&w=majority')
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
doc = {
'title':title,
'rank':rank,
'star':star
}
db.movies.insert_one(doc)
2) 연습 _ 영화 가버나움의 평점 불러오기
movie = db.movies.find_one({'title':'가버나움'})
print(movie['star'])
3) 연습 _ 영화 가버나움과 평점 같은 영화의 제목
movie = db.movies.find_one({'title':'가버나움'})
star = movie['star']
all_movies = list(db.movies.find({'star':star},{'_id':False}))
for m in all_movies:
print(m['title'])
4) 연습 _ 영화 가버나움 영화 평점 0으로 만들기
db.movies.update_one({'title': '가버나움'}, {'$set': {'star': '0'}})
5) 연습 _ 지니뮤직 1~50위 곡 스크래핑 하기
- 앞에서 두 글자만 끊기 = text[0:2]
- 여백을 없애주기 = strip()
musics = soup.select('#body-content > div.newest-list > div > table > tbody > tr')
for music in musics:
title = music.select_one('td.info > a.title.ellipsis').text.strip()
title = title.replace('19금', '').strip()
rank = music.select_one('td.number').text[0:2].strip()
artist = music.select_one('td.info > a.artist.ellipsis').text
print(rank,title,artist)
- 19금 음악의 딱지도 같이 불러져서 없애줄 필요가 있었다.
문자를 변경하는 .replace 함수를 이용해서
'.replace('19금', '')' → '19금'이라는 문자를 ''공백으로 제거해주었다.
#아직 숙달이 되지 않아.. 많이 헷갈린다! 두번째 들었지만 익숙해지도록 혼자 다양한것을 시도해야할거같다.
'항해 99 > 사전 기본 스터디' 카테고리의 다른 글
API 만들기 - GET / POST 연습 (파이썬, mongoDB) (0) | 2022.02.25 |
---|---|
Flask 기본 시작 - 서버만들기 (feat. PyCharm) (0) | 2022.02.25 |
WIL _ 웹스크래핑(크롤링) 기초 / .string .text의 차이 (0) | 2022.02.24 |
WIL _ 파이썬(Python) 패키지 (requests) 설치 해보기 (0) | 2022.02.24 |
WIL _ 파이썬 기초 (0) | 2022.02.24 |