오늘의 공부: 스파르타 3주차 끝냈다.
파이썬 라이브러리 BeautifulSoup 패키지에서 bs4를 사용하면 된다.
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')
네이버 영화사이트에서 데이터를 크롤링 해오는 기본코드.
#리스트 형태로 tr에 있는 내용들을 받아옴.
soup.select('#old_content > table > tbody > tr')
#tr에 있는 내용들 중 td > div > a태그의 내용을 받아옴.
tr.select_one('td.title > div > a')
MongoDB : 데이터베이스
몽고디비는 우리 눈에 안보이게 컴퓨터 뒤에서 돌아가는 친구임.
Robo 3T는 이 MongoDB의 데이터를 우리 눈으로 볼 수 있게 해줌.
데이터베이스는 왜쓰는걸까?
데이터를 잘 갖다 쓰려고 씀.
SQL : 엑셀과 유사함. 미리 정해놓고 거기에 데이터를 넣음.
행,열을 미리 정해놔야 해서 중간에 열을 하나 더하는 것이 어려울 것임. 예를들어 1만개의 회원데이터가 있었는데 여기에 주소를 갑자기 추가한다? 1만번째 컬럼까지는 빈칸인데 그 뒤로부터 주소가 적힘.
근데 정형화 되어있어서 데이터의 일관성이나 분석에 용이하고, 데이터를 뽑아가는 방식이 최적화가 많이 되어있음.
MS-SQL, My-SQL Oracle 등
NoSQL : 정해놓지 않고 한 줄 한줄이 오브젝트 형태로 들어감. 어떤 오브젝트 안에는 이메일이 있고 어떤건 없고 이런거 상관없음. 데이터 하나 하나 마다 같은 값들을 가질 필요가 없다는 얘기임.
예를들어 1만명 회원이 있는데 10,001번부터 주소가 들어가야한다? 그 앞에 1만개는 주소가 굳이 공란으로 채워질 필요가 없음. 그냥 10,001번부터는 주소를 든 친구 이렇게 가는거임. 그래서 굉장히 유연함. 데이터 적재에 유리한 대신 일관성이 부족함.
MongoDB
서버라는것은 컴퓨터의 역할임. 컴퓨터에서 서버라는 프로그램을 돌리자.. 내 컴퓨터에서 DB라는 프로그램을 돌리자 이런거임. DB는 무슨 컴퓨터나 새로운 하드웨어 이런 느낌이 아님. 포토샵 PPT 뭐 그런 프로그램처럼 DB도 프로그램중의 하나임.
몽고DB CRUD
from pymongo import MongoClient #파이몽고 임포트
client = MongoClient('localhost', 27017) #로컬에있는 몽고디비를 쓸거임
db = client.dbsparta # DB는 로컬에 있는 몽고디비 안에 dbsparta를 사용할 것임.
# insert / find / update / 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'})