mongoDB는 문서지향(Document-Oriented) 저장소를 제공하는 NoSQL 데이터베이스 시스템
mongoDB에서는 데이터가 Document로 불리며, 이 데이터의 집합을 Collection(RDMS(관계형 DB시스템)-Table)이라고 한다. 스키마 제약 없이 자유롭고, BSON(Binary JSON) 형태로 각 문서가 저장되며 배열(Array)이나 날짜(Date) 등 기존 RDMS에서 지원하지 않던 형태로도 저장할 수 있기 때문에 JOIN이 필요 없이 한 문서에 좀 더 이해하기 쉬운 형태 그대로 정보를 저장할 수 있다는 것이 특징이다.
특히 mongoDB는 문서지향 데이터베이스로, 이것은 객체지향 프로그래밍과 잘 맞고 JSON을 사용할 때 아주 유용
따라서 자바스크립트를 기반으로 하는 Node.js와 호환이 매우 좋기 때문에, Node.js에서 가장 많이 사용되는 데이터베이스입니다.
https://velog.io/@psj0810/%ED%99%98%EA%B2%BD%EB%B3%80%EC%88%98%EB%9E%80
'Robo 3T'는 프로그램은 MongoDB의 유용성을 더해주는 프로그램
Robo 3T 프로그램을 사용하게 되면 MongoDB를 그래픽 유저 인터페이스(GUI) 위에서 편하게 조회할 수 있도록 디자인(?)을 입혀주는 프로그램
mongodb는 눈에 보이지 않게 돌아가는데, robo 3t가 이걸 눈에 보이게끔 해주는것
https://parkjh7764.tistory.com/17
괄호대신 탭으로 구분
선언
a = 2
b = 3
딕셔너리
a={'name':'bob','age':27}
리스트
a_list=['사과','배','감']
함수
def sum(num1,num2):
return num1+num2
조건문
if age>5:
print
else:
print
ex)
def is_adult(age):
if(age>20):
print
else:
print
반복문
fruits=['사과','배','귤',...]
count=0
for i in fruits:
if i=='수박':
count++
패키지?
python에서 패키지는 모듈(일종의 기능 묶음)을 모아놓은 단위.
이런 패키지 묶음을 라이브러리라고 함
가상환경? venv=virtual environment
프로젝트별로 패키지를 담을 공구함
패키지 관리를 위한 것!
ex)
requests 패키치 설치후 사용해보기
settings -> project -> interpreter -> requests 검색 후 설치
requests 패키지 사용법? 구글링
import requests # requests 라이브러리 설치 필요
복습하면서 보니
requests를 통해서 서버에 요청하는데,
이거 html에서 자바스크립트로 api서버에 요청하던거랑 같다.
즉, 프론트에서 서버에 요청도 가능하고 백(파이썬)에서 다른 서버에 요청하는 경우도 가능하다는것
r = requests.get('http://openapi.seoul.go.kr:8088/6d4d776b466c656533356a4b4b5872/json/RealtimeCityAir/1/99')
rjson = r.json()
print(rjson)
검색엔진이 내 사이트 퍼가는 행위가 크롤링
사실상 정보 긁어오는건 스크래핑..
근데 그냥 혼용해서 쓴다. 편하게 크롤링이라 하자
순위 정보 가져오기 해보자
크롤링이 가능한 이유?
웹 프론트 html은 이미 받아온 데이터지. 이미 받아온거를 가지고 데이터 뽑아내는게 크롤링. 그냥 긁어오는거야 받아온 데이터
크롤링 핵심
1.요청
코드 단에서 브라우저 키지 않고 요청하는것
2 받아낸 html에서 내가원하는 정보 잘 솎아내는것
=>beautifulsoup의 역할
request 패키지로 api서버에 요청 후 데이터를 받음
그리고 받은 데이터를 bp4 를 통해 솎아냄(데이터 뽑기 쉽도록)
select_one
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://movie.naver.com/movie/sdb/rank/rmovie.nhn?sel=pnt&date=20200303',headers=headers)
soup = BeautifulSoup(data.text, 'html.parser')
title = soup.select_one('#old_content > table > tbody > tr:nth-child(2) > td.title > div > a');
/*selector는 해당 페이지에서 검사 누른후 copy selector 통해서 복사해온다. selector 은 즉, 선택자를 의미*/
print(title.text)
print(title['href'])
# 코딩 시작
select
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://movie.naver.com/movie/sdb/rank/rmovie.nhn?sel=pnt&date=20200303',headers=headers)
soup = BeautifulSoup(data.text, 'html.parser')
trs = soup.select('#old_content > table > tbody > tr')
for tr in trs:
a_tag = tr.select_one('td.title > div > a')
if a_tag is not None:
title = a_tag.text
rank = tr.select_one('td:nth-child(1) > img')['alt']
grade = tr.select_one('td.point').text
print(rank,title,grade)
# 코딩 시작
데이터를 찾기 쉽게 잘 정리해서 쌓아놓은 데이터 창고
RDBMS vs NoSQL
몽고db는 그냥 딕셔너리가 쌓이는것..?
pymongo설치
insert
from pymongo import MongoClient
client = MongoClient('localhost', 27017) #내 컴퓨터에서 돌아가는 몽고db접속
db = client.dbsparta #dbsparta라는 db 이름으로 접속
# insert / find / update / delete
doc = {'name':'bobby','age':21}#딕셔너리
db.users.insert_one(doc)#딕셔너리를 db안에 users (콜렉션)에 넣는다. 콜렉션은 비슷한애들끼리 모아놓은것 관계db의 테이블이다.
find
same_ages = list(db.users.find({'age':21},{'_id':False}))
#_id:false 는 id값은 가져오지 말라는 의미
same_ages = list(db.users.find({},{'_id':False}))
#빈 중괄호는 조건없이 전부 다 가져오라는 뜻
user = db.users.find_one({'name':'bobby'},{'_id':False})
#Bobby가 여러개 있어도 한 개만 갖고 온다.
update
db.users.update_one({'name':'bobby'},{'$set':{'age':19}})
#name이 bobby인 애를 바꿔서 age를 19로 바꿔라 users 는 collection이름
delete
db.users.delete_one({'name':'bobby'})
MongoDB 총정리
# 저장 - 예시
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'})
지니뮤직 크롤링 과제
import requests
from bs4 import BeautifulSoup
from pymongo import MongoClient
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_info = tr.select_one('td.number').text
rank = rank_info.split(' ')[0].strip()
song = tr.select_one('td.info > a.title.ellipsis').text.strip()
name = tr.select_one('td.info > a.artist.ellipsis').text;
print(rank+' 제목:'+song+' 가수:'+name)
# for tr in trs:
# rank=tr.select_one('td.number')
# print(rank)
크롤링 하는법
데이터베이스 다루는법