✔ monogodB는 딕셔너리형태로 저장되는 데이터 프로그램.
✔ pymongodB
[기본코드]
from pymongo import MongoClient client = MongoClient('localhost', 27017) db = client.dbsparta # 코딩 시작
Run 실행 후 Robot 3T를 실행하면, mylocalDb Refresh를 클릭한 후, Collection > users 더블클릭!
그리고 'View results in table mode'인 아이콘을 누른다.
-[insert]
from pymongo import MongoClient -- pymongo를 임포트 하기 client = MongoClient('localhost', 27017) -- mongoDB는 27017 포트로 돌아갑니다. db = client.dbsparta -- 'dbsparta'라는 이름의 db를 만듭니다. doc = {'name':'bobby','age':21} db.users.insert_one(doc) -- user라는 컬렉션 안에 insert 해라.
Run 실행 후 Collection > users를 더블클릭!
-[find] (모든 결과값을 가져오기)
from pymongo import MongoClient client = MongoClient('localhost', 27017) db = client.dbsparta same_ages = list(db.users.find({'age':21},{'_id':False}))
[{'name': 'bobby', 'age': 21}, {'name': 'john', 'age': 21}, {'name': 'jane', 'age': 21}]
list안에 딕셔너리형태로 되어있으므로
same_ages = list(db.users.find({'age':21},{'_id':False})) for person in same_ages: print(person)
{'name': 'bobby', 'age': 21}
{'name': 'john', 'age': 21}
{'name': 'jane', 'age': 21}
same_ages = list(db.users.find({},{'_id':False})) for person in same_ages: print(person)
모든 걸 다 갖고 오고 싶으면, 빈괄호를 쓴다. '{}' 자주 쓰일 것이다.
-[find] (특정결과값만 가져오기)
from pymongo import MongoClient client = MongoClient('localhost', 27017) db = client.dbsparta user = db.users.find_one({'name':'bobby'},{'_id':False}) print(user)
{'name': 'bobby', 'age': 21}
-[update]
from pymongo import MongoClient client = MongoClient('localhost', 27017) db = client.dbsparta db.users.update_one({'name':'bobby'},{'$set':{'age':19}})
Run 실행 후 Collection > users를 더블클릭! 그러면 update된 숫자가 바뀔 것이다.
-[delete] 거의안씀
from pymongo import MongoClient client = MongoClient('localhost', 27017) db = client.dbsparta db.users.delete_one({'name':'bobby'})
Run 실행 후 Collection > users를 더블클릭! 그러면 delete된 숫자가 바뀔 것이다.
✅요약
# 저장 - 예시
doc = {'name':'bobby','age':21}
db.users.insert_one(doc)
# 한 개 찾기 - 예시
user = db.users.find_one({'name':'bobby'})
# 여러개 찾기 - 예시 ( _id 값은 제외하고 출력)
same_ages = list(db.users.find({'age':21},{'_id':False}))
# 바꾸기 - 예시
db.users.update_one({'name':'bobby'},{'$set':{'age':19}})
# 지우기 - 예시
db.users.delete_one({'name':'bobby'})
✔ 6일차에 했던 movies웹스크래핑 결과 저장하기
import requests
from bs4 import BeautifulSoup
from pymongo import MongoClient
client = MongoClient('localhost', 27017) -- 기본코드를 넣는다 --
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.nhn?sel=pnt&date=20200303',headers=headers)
soup = BeautifulSoup(data.text, 'html.parser')
movies = soup.select('#old_content > table > tbody > tr')
for movie in movies:
a_tag = movie.select_one('td.title > div > a')
if a_tag is not None:
rank = movie.select_one('td:nth-child(1) > img')['alt']
title = a_tag.text
star = movie.select_one('td.point').text
doc = {
'rank':rank,
'title':title,
'star':star
}
db.movies.insert_one(doc)
Run 실행 후 Collection을 refresh한 후 > movies를 더블클릭!
✔ 웹스크래핑 결과를 이용하기
[영화제목 '매트릭스'의 평점을 가져오기]
from pymongo import MongoClient
client = MongoClient('localhost', 27017)
db = client.dbsparta
movie = db.movies.find_one({'title':'매트릭스'},{'_id':False})
print(movie['star'])
9.39
['매트릭스'의 평점과 같은 평점의 영화 제목들을 가져오기]
from pymongo import MongoClient
client = MongoClient('localhost', 27017)
db = client.dbsparta
target_movie = db.movies.find_one({'title':'매트릭스'},{'_id':False})
target_star = target_movie['star'] ---9.39를 target_star라고 지정한 뒤,
target_movies = list(db.movies.find({'star':target_star},{'_id':False})) --조건인 'star'가 target_star와 같아져야 한다.
for target in target_movies: ---리스트안에 딕셔너리형태로 되어있을 경우, 간단히 for문을 이용한다.
print(target['title'])
[매트릭스 영화의 평점을 0으로 만들기]
from pymongo import MongoClient
client = MongoClient('localhost', 27017)
db = client.dbsparta
db.movies.update_one({'title':'매트릭스'},{'$set':{'star':0}})
✅ 하나하나의 코드별(title,rank,artist)로 하나씩 print(title), print(rank), print(artist)해보면서 결과값을 확인해보면서 부족한 부분을 구글링해서 덧붙이기!
for tr in trs:
title = tr.select_one('td.info > a.title.ellipsis')
print(title.text)
결과가 공백들이 많이 보일 것이다. 구글링해서 '파이썬 공백 제거'라고 검색하면, '어떤 부분.strip()'해야한다!
for tr in trs:
rank = tr.select_one('td.number')
print(rank.text)
결과가 상승, 하강 등 필요없는 부분이 있을 것이다.
구글링해서 '파이썬 문자열 자르기'라고 검색하면, [첫부분(0):끝부분(숫자)]
숫자가 1~9 에서도 공백이 나타나므로 .strip()도 붙여준다.
-------완성본------
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('https://www.genie.co.kr/chart/top200?ditc=D&ymd=20200403&hh=23&rtm=N&pg=1',headers=headers)
soup = BeautifulSoup(data.text, 'html.parser')
trs = soup.select('#body-content > div.newest-list > div > table > tbody > tr')
for tr in trs:
rank = tr.select_one('td.number').text[0:2].strip()
title = tr.select_one('td.info > a.title.ellipsis').text.strip()
artist = tr.select_one('td.info > a.artist.ellipsis').text
print(rank,title,artist)
✔ 서버란?
컴퓨터에 돌아갈 수 있게 하는 프로그램
'로컬 개발환경'이란>> 같은 컴퓨터에다 서버도 만들고, 요청도 할 거예요. 즉, 클라이언트 = 서버가 되는 것!!!
✔ 프레임워크와 라이브러리
프레임워크는 남이 짜둔 규칙이나 틀 안에서 자유롭게 내가 코딩할 수 있다. 그래서 하나의 프레임워크에서만 짤 수 있다!
라이브러리는 내가 내맘대로 짜는데, 남이 만들어둔 것을 중간에 자유롭게 갖다 쓸 수 있다. 100개 등 1000개 등 갖다 쓸 수 있다.
✔ [Flask 시작코드]
from flask import Flask app = Flask(__name__) @app.route('/') def home(): return 'This is Home!' if __name__ == '__main__': app.run('0.0.0.0',port=5000,debug=True)
Run 실행 후,
http://localhost:5000/ 접속하면, This is Home!
from flask import Flask
app = Flask(__name__)
@app.route('/')
def home():
return '나의 첫 서버!!!'
@app.route('/mypage')
def mypage():
return 'mypage 입니다.'
if __name__ == '__main__':
app.run('0.0.0.0',port=5000,debug=True)
Run 실행 후,
http://localhost:5000/mypage 접속하면, mypage 입니다.
from flask import Flask
app = Flask(__name__)
@app.route('/')
def home():
return '<button>나는버튼이다</button>'
if __name__ == '__main__':
app.run('0.0.0.0',port=5000,debug=True)
Run 실행 후,
http://localhost:5000/ 접속하면, 버튼창 이 나올것이다.
오늘은 크롤링한 결과를 monogoDB를 통해서 작동하는 법을 배웠는데, 남이 짜둔 코드를 바꾸고, 그런방법을 하다보니 재미있다.
이제 컴퓨터에서 돌아가는 서버에 대한 이해를 하면서, 점차 우리가 사용하는 웹페이지에 대해서 점차 이해가기 시작된다.