내일배움단 11일메이킹챌린지 1일차

이하나·2021년 7월 19일
0

웹개발 종합반

목록 보기
1/14
post-thumbnail
1일차 ( mongoDB ~ 웹스크래핑 & 숙제 / 프로젝트 1일차 )

[ 1일차 ] 프로젝트 주제 선정 및 역할 분배

  • 선정된 주제 : 게임 카테고리별 추천 사이트
  • 사용 API : https://www.freetogame.com/api-doc
  • 역할 분배 : 프론트엔드(2),백엔드(2), 프론트&백엔드(2)

[1] mongoDB 와 Robo3T의 역할

  • mongoDB : 데이터베이스 , 그래픽인터페이스(=GUI)를 제공하지 않는다.
  • Robo3T : mongoDB의 내부를 확인할 수 있도록 해준다.

[2] 데이터베이스의 종류

  • SQL
    : 행과 열이 정해진 엑셀에 데이터를 저장하는 것처럼, 미리 항목을 정해둔 데이터베이스.
    정형화 되어있어 데이터가 일관되어 분석에는 용이하나,
    그만큼 중간에 틀을 바꾸기가 쉽지 않아 변화에는 비효율적이다.
(ex) MS-SQL, My-SQL, Oracle ...
  • NoSQL ( Not only SQL )
    : 딕셔너리 형태로 데이터를 저장하는 데이터베이스.
    데이터 하나하나 다른 값들을 가질 수 있게 된다.
    자유로운 형태라서 변화에는 용이하나, 일관성이 부족하다.
(ex) mongoDB ...

[3] Pymongo

  • Pymongo : mongoDB를 Python으로 조작하기 위한 라이브러리.
구동을 위한 기본코드
from pymongo import MongoClient          
			#pymongo를 임포트 하기
client = MongoClient('localhost', 27017)      
			#mongoDB는 27017 포트로 구동
db = client.dbsparta						
			#'dbsparta'라는 이름의 데이터베이스 추가
  • Pymongo에서는 mongoDB 내의 데이터 저장, 검색, 수정, 삭제가 가능하다.
[ 예 시 ]
doc = {'name':'bobby','age':21}		
			# 이 데이터 하나를
db.users.insert_one(doc)			
			# 데이터베이스의 users에 저장한다.
     
user = db.users.find_one({'name':'bobby'})
			# users에서 이 값을 가진 데이터를 찾는다.
same_ages = list(db.users.find({'age':21},{'_id':False}))
			# users에서 이 값을 가진 데이터들을 리스트로 만든다.
     
db.users.update_one({'name':'bobby'},{'$set':{'age':19}})
			# users에 name:bobby인 데이터의 age를 19로 수정한다.
     
db.users.delete_one({'name':'bobby'})
			# users의 데이터 중 이 값을 가진 데이터를 지운다.

[4] Quiz 웹스크랩핑 결과 이용하기

네이버 영화 평점을 스크랩핑해서,

  • Q1 영화제목 '매트릭스'의 평점을 가져오기
  • Q2 '매트릭스'의 평점과 같은 평점의 영화 제목들을 가져오기
  • Q3 매트릭스 영화의 평점을 0으로 만들기
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')

trs = soup.select('#old_content > table > tbody > tr')


for tr in trs:
    tag = tr.select_one('td.title > div > a')

user = db.movies.find_one({'title':'매트릭스'},{'_id':False})

same = user['star']

#quiz1

print(same)

#quiz2

users = list(db.movies.find({'star':same},{'_id':False}))

for us in users :
    print(us['title'])

#quiz3

#db.movies.update_one({'title':'매트릭스'},{'$set':{'star':'0'}})

결과 :

  • Q1
  • Q2
  • Q3

[5] 숙제 > 지니뮤직 1 ~ 50위 스크랩핑 하기

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://www.genie.co.kr/chart/top200?ditc=D&ymd=20200403&hh=23&rtm=N&pg=1', headers=headers)

soup = BeautifulSoup(data.text, 'html.parser')

geni = soup.select('#body-content > div.newest-list > div > table > tbody > tr')

for songs in geni:
    song = songs.select_one('td.info > a.title.ellipsis').text
    title = song.strip()
    rank = songs.select_one('td.number').text[0:2].strip()
    # 슬라이싱 : [a:b] a열에서 b열까지 추출.
    singer = songs.select_one('td.info > a.artist.ellipsis').text.strip()

    print(rank, title, singer)

결과 :

강의를 듣고 난후_

	: 강의를 들으며 할때는 잘 따라하다가도 퀴즈나 숙제 할때는 몇번이고 헤매고 오류나고
    	했지만 결국에는 혼자만의 힘으로 해내게 되는게 스파르타의 힘이 아닐까싶다. 어쩌면 
        다음에 다시 mongoDB를 하게 될때 다시 또 헤맬수도 있겠지만, 그때도 다시 잘 해낼거라
        는 자신감이 생겼다.
        이번 프로젝트에서 내가 가져온 주제가 선정이 되서 엄청 놀랐었다. 안될거라고 예상했기에
        주제설명도 엄청 떨면서 횡설수설한 기분이었지만, 팀원분들이 워낙 좋은 분들이기도 하고 
        다들 나보다는 능력이 출중하신 분들이라서 이야기가 생각보다 잘 정리되었다.
        내일까지 홈페이지 구성을 생각해온뒤 이야기를 나누기로 했다. 고민 좀 해봐야할듯 하다.
profile
코딩을 배우는 비전공자 코린이!

0개의 댓글