스파르타코딩클럽 웹개발 왕초보 종합반 3주차 개발일지

스파르타코딩클럽 웹개발 왕초보 종합반 3주차

3-1 필수 프로그램 설치하기

3주차 1강에선 앞으로 수업을 듣는데 필요한 프로그램을 설치하는 과정이다. (윈도우 기준)

  1. 파이썬 설치하기
    (Add python 3.8 to PATH 체크박스 체크하기)
  2. MongoDB 설치하기
    (설치 전, C드라이브에 폴더 2개를 만들고 그 중 1개는 data 라는 이름으로 변경한다. data 폴더안에 db라는 폴더를 만들고 db폴더에 MongoDB를 설치한다. custom → browse → 폴더설정
    설치 중간에 Install MongoDB Compass 체크박스 해제 )
  3. 환경변수 설정
    (윈도우 검색창 → ‘시스템 환경 변수 편집’ 검색 → 고급탭에 환경변수 클릭 → 시스템 변수에서 Path 클릭 → 새로만들기 클릭후  아래 문구 복사 후 붙여넣기 한뒤 확인)
    시스템 환경변수 설정
    C:\data\db\bin
  4. MongoDB 실행
    (윈도우 검색창 → ‘CMD’ 검색 → ‘mongod’ 입력)
    Mongo DB 실행되는지 확인 방법 : 크롬을 켜고 주소창에 localhost:27017를 입력했을 때

    It looks like you are trying to access MongoDB over HTTP on the native driver port.

    위 문구가 나오면 잘 실행되고 있는중이다.

  5. Robo3T 설치하기
    (위 링크로 접속 후 오른쪽 하단 하얀색 박스에 있는 ‘Download Robo 3T Only’ 클릭 후 .exe파일 설치)
  6. Git bash 설치하기
    (위 링크를 클릭하면 다운로드 됩니다. 계속 next를 클릭해서 설치한다.)

 

3-2 3주차에 배울 내용

3주차에 배울 내용은 앞에 배웠던 내용을 조금 복습 + 파이썬으로 웹에 있는 데이터를 가져오는 크롤링과 데이터를 저장할 수 있도록 MongoDB를 활용해볼 예정이다.

 

3-3 연습 겸 복습 

파이참 실행 →  나홀로 메모장 파일(index.html) 실행
기존에 있던 나홀로 메모장에 스파르타에서 제공한 나홀로메모장 API를 이용해 새로 만들었다.

 

3-4 파이썬 시작하기

파이썬은 범용적 측면, 진입장벽이 낮아 많이 사용된다.

파이썬 실행후 아래와 같이 설정

* 주의사항 *
New project가 만들어지고 나면 venv파일은 건들지 않는다.

 

3-5 파이썬 기초공부

파이썬은 매우 직관적이다!
변수, 자료형, 함수, 조건문, 반복문을 배우면 거의 모든 로직을 구현할 수 있다.

예시
a = 2
b = 3

print(a+b)

first_name = 'saewan'
last_name = 'hyoung'

print(first_name+last_name)


a_list = ['사과','배','감']

print(a_list)
print(a_list[1])

a_list.append('수박')
print(a_list )


a_dict = {'name':'bob','age':27}
print(a_dict['name'])
print(a_dict['age'])

a_dict['height'] = 178
print(a_dict)

예시
def  aa(num1,num2):
    print('안녕!')
    return num1+num2

result = aa(2,3)

print(result)








def is_adult(age):
    if age > 20 :
        print('성인입니다')
    else :
        print('청소년입니다')

is_adult(30)
is_adult(11)







fruits = ['사과','배','배','감','수박','귤','딸기','사과','배','수박']

count = 0
for ff in fruits:
    if ff == '수박' :
        count = count + 1
print(count)







people = [{'name': 'bob', 'age': 20},
          {'name': 'carry', 'age': 38},
          {'name': 'john', 'age': 7},
          {'name': 'smith', 'age': 17},
          {'name': 'ben', 'age': 27}]

for person in people:
    print(person['name'],person['age'])
    if person['age'] < 20:
        print(person)

 

3-6 파이썬패키지 설치하기

패키지란?
파이썬에서 사용하는 모듈을 모아놓은것. 모듈을 다운받고 짧은 코드를 이용해서 다양한 기능을 사용 할 수 있다.

VENV = 가상환경
파이썬 라이브러리를 담는 곳

파이썬에서 상단에 File 클릭 → Settings (ctrl+alt+s) 클릭 → 좌측탭에서 Project: pythonprac에서 python interpreter 클릭 →  + 모양 아이콘 클릭 → requests 검색후 하단에 Install Package 다운로드

 

3-7 패키지 사용해보기

3-6에서 다운받은 requests 패키지를 사용해보기.

구글 검색 : python ______ 패키지 를 검색하면 원하는 패키지의 사용법을 알 수 있다.

reqeusts 패키지 사용해보기
import requests # requests 라이브러리 설치 필요

r = requests.get('http://openapi.seoul.go.kr:8088/6d4d776b466c656533356a4b4b5872/json/RealtimeCityAir/1/99')
rjson = r.json()

print(rjson['RealtimeCityAir']['row'][0]['NO2'])

 

3-8 웹스크래핑(크롤링) 기초

크롤링은 네이버나 구글 검색엔진이 내 사이트를 퍼가는것이고 우리가 하는건 스크래핑이라고 할 수 있다. 스크랩 + ing~

  1. 3-6에서 패키지 다운받는 방법을 이용해서 bs4라는 패키지를 다운 받는다.
  2. 스파르타에서 제공한 크롤링 기본세팅을 복사해서 파이썬에 붙여넣기 한다.
    크롤링 기본 세팅

    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')
    
    # 코딩 시작


크롤링을 할 때 중요한점
1. 요청하는것
2. 잘 걸러내기

3-8 내용

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')
# headers : 브라우저에서 검색한것 처럼 보이기 위해
# 코딩 시작

# 검색 copy selecttor
title = soup.select_one('#old_content > table > tbody > tr:nth-child(2) > td.title > div > a')


#old_content > table > tbody > tr:nth-child(2)
#old_content > table > tbody > tr:nth-child(3)

# 태그의 텍스트를 가져오고 싶다면 : print(title.text)

#print(title['href'])

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

#old_content > table > tbody > tr:nth-child(2) >


for tr in trs:
    a_tag = tr.select_one('td.title > div > a')
    if a_tag is not None:
        title = a_tag.text
        print(title)

 

3-9 Quiz_웹스크래핑(크롤링) 연습

순위, 이름, 랭크가 나오게 크롤링하기

크롤링 Quiz

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')
# headers : 브라우저에서 검색한것 처럼 보이기 위해
# 코딩 시작

# 검색 copy selecttor
# title = soup.select_one('#old_content > table > tbody > tr:nth-child(2) > td.title > div > a')


#old_content > table > tbody > tr:nth-child(2)
#old_content > table > tbody > tr:nth-child(3)

# 태그의 텍스트를 가져오고 싶다면 : print(title.text)

#print(title['href'])

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

#old_content > table > tbody > tr:nth-child(2) >


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']
         star = tr.select_one('td.point').text
         print(rank, title, star)

 

3-10 DB설치 확인

3-1강에서 설치한 DB가 작동하는지 확인했고, Robo 3T도 잘 설치되었는지 확인

MongoDB는 데이터 베이스다. (데이터를 쌓아두는것)
Robo 3T는 MongoDB의 데이터를 눈에 보이게 해주는 프로그램 이다.

 

3-11 DB개괄

DB를 사용하는 이유는?
→ 데이터를 저장해놓고 가져다 사용하기 위해

데이터베이스는 SQL과 NoSQL이 있다.

SQL

엑셀에 가깝다. 칸을 만들어두고 저장 (열, 행을 미리 정해놔야함.) 중간에 바꾸기가 힘들지만 정형화된 데이터를 산출하는것에는 유리하다. 데이터 분석에 유리하다.
ex) MySQL, Oracle 등

NoSQL

dictonary 형태로 저장됨. 유연하다. 초기 스타트업, 서비스에서 많이 채택한다.
ex) MongoDB 등

 

3-12 pymongo로 DB조작하기

파이썬으로 mongoDB를 사용하기위해선 pymongo라는 패키지를 설치하다.
(3-6강 내용 참고하기)

pymongo 기본코드

from pymongo import MongoClient
client = MongoClient('localhost', 27017)
db = client.dbsparta

# 코딩 시작

 

pymongo 코드요약

# 저장 - 예시
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'})

 

3-13 웹스크래핑 결과 저장하기

3-9강에서 만들었던 파일을 mongoDB에 저장하기
1. pymongo 기본코드를 3-9강에 만들 파이썬 파일 위쪽에 넣어준다.
2. rank, title, star라는 doc을 만든다.
3. db.movies.insert_one(doc) 를 입력 후 run해서 실행시킨다.

3-13 코드

from pymongo import MongoClient
client = MongoClient('localhost', 27017)
db = client.dbsparta

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')
# headers : 브라우저에서 검색한것 처럼 보이기 위해
# 코딩 시작

# 검색 copy selecttor
# title = soup.select_one('#old_content > table > tbody > tr:nth-child(2) > td.title > div > a')


#old_content > table > tbody > tr:nth-child(2)
#old_content > table > tbody > tr:nth-child(3)

# 태그의 텍스트를 가져오고 싶다면 : print(title.text)

#print(title['href'])

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

#old_content > table > tbody > tr:nth-child(2) >


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']
         star = tr.select_one('td.point').text
         # print(rank, title, star)

         doc = {
             'rank':rank,
             'title':title,
             'star':star
         }
         db.movies.insert_one(doc)

 

3-14 Quiz 웹스크래핑 결과 이용하기

Quiz
1. ‘매트릭스’의 평점 가져오기
2. ‘매트릭스’의 평점과 같은 평점의 영화 제목 가져오기
3. ‘매트릭스 영화의 평점을 0으로 만들기

3-14 Quiz 정답

from pymongo import MongoClient
client = MongoClient('localhost', 27017)
db = client.dbsparta


# '매트릭스'의 평점 가져오기
movie = db.movies.find_one({'title':'매트릭스'},{'_id':False})
print(movie['star'])



#'매트릭스'의 평점과 같은 평점의 영화 제목 가져오기
same_star = movie['star']

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

for target in target_movies:
    print(target['title'])

# '매트릭스 영화의 평점을 0으로 만들기
db.movies.update_one({'title':'매트릭스'},{'$set':{'star':'0'}})

숫자의 경우 문자 인지 숫자인지 확인할것!!!

 

3-15 3주차 끝 & 숙제

지니뮤직의 1~50위 곡을 스크래핑 하기

3-15 숙제 기본틀

from pymongo import MongoClient
client = MongoClient('localhost', 27017)
db = client.dbsparta

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')

 

.

.

.

.

.

.

.

정답

정답

from pymongo import MongoClient
client = MongoClient('localhost', 27017)
db = client.dbsparta

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')

# title= soup.select_one('#body-content > div.newest-list > div > table > tbody > tr:nth-child(1) > td.info > a.title.ellipsis')
# print(title.text)

#body-content > div.newest-list > div > table > tbody > tr:nth-child(1)

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

for tr in trs:
    a_tag = tr.select_one('td.info > a.title.ellipsis')
    # body-content > div.newest-list > div > table > tbody > tr:nth-child(1) > td.number
    # body-content > div.newest-list > div > table > tbody > tr:nth-child(2) > td.number
    title = a_tag.text.strip()
    rank = tr.select_one('td.number').text[0:2].strip()
    name = tr.select_one('td.info > a.artist.ellipsis').text

    print(rank, title, name)




#가수이름
#body-content > div.newest-list > div > table > tbody > tr:nth-child(1) > td.info > a.artist.ellipsis
#body-content > div.newest-list > div > table > tbody > tr:nth-child(2) > td.info > a.artist.ellipsis

#body-content > div.newest-list > div > table > tbody > tr:nth-child(1) > td.number


#body-content > div.newest-list > div > table > tbody > tr:nth-child(1) > td.info > a.title.ellipsis


 

 

후기

3주차 강의는 2주차 강의 보단 상대적인 느낌으로는 좀 더 쉬웠던거 같다. 하지만 그렇다고 아주 쉽진않았ㄷ… 빨리 전체 강의를 완강하고 모르는 부분을 좀 더 자세하게 듣고 내 것으로 만들어야 겠다는 생각을 한다..

 

개발일지 List

1주차 개발일지
2주차 개발일지

 

 

Leave a Comment