항해 사전강의 주차

항해99 사전강의 3주차

노엠디엔 2022. 9. 27. 23:39

사전 강의 3주 차에서는 파이썬 언어와 mongoDB 데이터 베이스,  페이지의 내용 스크랩 해오기

 

파이썬 다운로드

반드시 Python 3.8.6 버전을 설치해야 한다. (3.9는 너무 최신 버전이라 오작동하는 라이브러리들이 있어서)

파이썬 다운로드 링크

https://www.python.org/ftp/python/3.8.6/python-3.8.6-amd64.exe 

 

gitBash 다운로드

https://git-scm.com/

 

다음으로 파이썬 기초 문법 공부

기본 연산

a = 3   # 3을 a에 넣는다.

b = 2   # 2를 b에 넣는다.

c = a + b   # 2 + 3 더한 값을 c에 넣는다.

 

문자열을 더할 수도 있다!

a = 'bumkyu"

b = "lee"

c = a + b  #"bumkyulee 가 된다"

 

불리안

is_number = True # True 또는 False -> "Boolean"형이 들어갈 수도 있습니다.

 

# 변수의 이름은 마음대로 지을 수 있지만 사용해선 안 되는 예약어들이 존재한다! 예) for, const, var, let 등등

또한 변수명을 지을 때는 규칙 또한 존재한다.

 

1. 라틴문자 사용! (a-z,  A-Z,  0-9)

2. 대소문자 구분!

3. 카멜 케이스(someVariable) 사용

변수에는 단어가 두 개 이상일 시에는 첫 글자가 대문자로 시작되는 카멜 케이스(Camel Case) #낙타 문법? 을 사용하는 것을 추천                 예시)  numberMax = 100;

4. 변수명은 반드시 영어

5. 숫자로 시작 금지

6. 특수문자 금지( _ 언더바 및 $ 달러사인 은 가능!)

7. 아이콘 사용 금지

 

배열

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

배열의 값을 하니씩 확인하고 싶다면 a_list [2]  배열 시작은 0부터 이기 때문에 '김'이라는 값을 확인할 수 있다.

 

객체

a_dict = {}

a_dict = {'name':'bob', 'age':21}  #"name"이라는 key에 "bob"값을  "age'에 21 값을

a_dict['height'] = 178

객체는 key와 value값으로 이루어지는데 위와 같은 방법으로  'height"라는 key의 value를  178이라는 값으로 변경할 수 있다.

 

함수

 def sum_all(a,b,c): <- () 소괄호 안에 들어가는 것은 인자라고 불림

          return a+b+c;  a, b,c 3개의 인자를 받아서  모두 더한 값을 다시 돌려줌!

sum_all(1,2,3)  < 이렇게 sum_all이라는 함수를 실행시키면 

1+2+3을 하므로 6을 다시 돌려받는다!

 

주의할 점으로 파이썬에는 함수를 만들 때 들여 쓰기를 잘 맞춰서 작성해야 한다!

 

if문

def oddeven(num):                   # oddeven이라는 이름의 함수를 정의한다. num을 인자로 받는다.

        if num % 2 == 0:               # num을 2로 나눈 나머지가 0이면

              return True                 # True (참)을 반환한다.

        else:                                 # 아니면,

              return  False              # False (거짓)을 반환한다.

 

for 문

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

     count = 0

      for fruit in fruits:         #위에 정의된 fruits 배열을 돌면서 fruit이라는 변수에 넣어주고 

          if fruit == '사과':     # if문을 활용해서 그 fruit라는 변수에 '사과'라는 문자열이 들어가면

             count += 1         # count라는 변수에 숫자 값을 1 증가시킨다

결과로 2가 나오게 된다.

 

파이썬 패키지 설치

패키지? 라이브러리? → Python 에서 패키지는 모듈(일종의 기능들 묶음)을 모아 놓은 단위이다. 이런 패키지의 묶음을 라이브러리라고 볼 수 있다.

 

가상 환경?!(virtual environment)이란?

문제 상황 예시

회사에서는 패키지 A, B, C를 설치해서 쓰고, 개인 프로젝트에서는 패키지 B, C, D, E를 설치해서 쓰고 있었는데 회사 팀장님이 B를 이전 버전인 B~ 로 쓰자고 하신다면 같은 컴퓨터에 깔려 있는 개인 프로젝트에  B~로 쓰면 코드를 다 바꿔야 한다 이런 상황에서 필요한 게 가상 환경?

 

다 담아둘 필요 없이 공구함을 2개 만들어서, 공구함 1에 A, B', C를 담아두고, 공구함 2에 B, C, D, E를 담아 두는 원리로 

가상 환경이라는 개념이 등장했다. 즉, 프로젝트별 공구함이라고 볼 수 있다.

 

가상 환경(virtual environment)은 같은 시스템에서 실행되는 다른 파이썬 응용 프로그램들의 동작에 영향을 주지 않기 위해, 파이썬 배포 패키지들을 설치하거나 업그레이드하는 것을 가능하게 하는 격리된 실행 환경인 인 것이다

출처 : 파이썬 공식 용어집- 가상 환경.

 

 

파이참에서 파일 -> 설정 -> 프로젝트 -> python 인터프리터에서 requests라는 패키지를 설치했다.

라이브러리마다 정리된 방식이 다르기 때문에 해당 라이브러리에 사이트에 사용방법을 찾아봐야 한다!

requests 라이브러리 사용방법

import requests        # requests 라이브러리 설치 필요

r = requests.get('http://spartacodingclub.shop/sparta_api/seoulair')

rjson = r.json()

 

DB

DB는 왜 쓰는 것일까? 

잘 넣어두기 위해서? 나중에 잘 찾기 위해서?

DB 저장이 목적이라기보단 나중에 잘 찾기 위해서에 더 가깝다고 볼 수 있다.

눈에 보이진 않지만 사실 DB에는 index라는 순서로 데이터들이 정렬되어 있다고 한다.

 

DB에는 두 가지 종류가 있는데

RDBMS(SQL)

행/열의 생김새가 정해진 엑셀에 데이터를 저장하는 것과 유사하며. 데이터 50만 개가 적재된 상태에서  중간에 열을 하나 더하기는 어렵다. 그러나, 정형화되어 있는 만큼, 데이터의 일관성이나 / 분석에 용이할 수 있다.

ex) MS-SQL, My-SQL 등

 

No-SQL

딕셔너리 형태로 데이터를 저장해두는 DB이다. 고로 데이터 하나하나마다 같은 값들을 가질 필요가 없게 되며, 자유로운 형태의 데이터 적재에 유리한 대신, 일관성이 부족할 수 있다.

ex) MongoDB

 

그럼 DB의 실체는 특별한 컴퓨터일까

아니다. 아주 간단하게, 우리가 쓰는 프로그램과 같은 것이며

 내 컴퓨터에 게임도 설치하고, PPT도 설치하고, DB도 설치할 수 있는 것이다.

 그 런 데! 이 마저도 요새는 Cloud 형태로 제공해주는 곳들이 많아서

강의에서는 최신 클라우드 서비스인 mongoDB Atlas를 사용한다.

 

mogoDB 가입, DB 생성

https://account.mongodb.com/account/register

 

pymongo, dnspython  패키치 설치

 

 mongoDB연결코드

from pymongo import MongoClient
import certifi
ca = certifi.where()
client = MongoClient('mongodb+srv://test:sparta@cluster0.이름.mongodb.net/?retryWrites=true&w=majority',tlsCAFile=ca)
db = client.dbsparta
db.user.insert_one(doc)

db. 데이터가 들어갈 저장 소이름. insert_one(넣을 데이터)    #이런 식으로 mongoDB에 데이터를 넣을 수 있다.

 

데이터를 여러 개 가져올 때 

#mongoDB에서는 데이터가 저장될 때 id라는 값이 생성돼서 들어가기 때문에 id를 빼고 가져오는 코드

all_users =db.user.find({},{'id':False})

for user in all_users:
    print(user)

데이터를 하나 가져올 때

user =db.user.find_one({'name':'bobby'});

 

데이터를 업데이트할 때

해당 데이터를 먼저 찾는 key:value 형태의 값을 입력하고('name'이 'bobby'인 데이터)

$set을 통해 해당 데이터의 'age'값을 19로 변경

db.users.update_one({'name':'bobby'},{'$set':{'age':19}})

데이터를 삭제할 때

db.users.delete_one({'name':'bobby'})

3주차 숙제로 genie 뮤직 사이트의 순의/곡 제목/ 가수를 스크래핑을 해보았다.

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=M&rtm=N&ymd=20210701',headers=headers)

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

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

for music in musics :
    a = music.select_one('td.info > a.title.ellipsis')
    b = music.select_one('td.number')
    c = music.select_one('td.info > a.artist.ellipsis')
    if a is not None:
        rank = b.text[0:2].strip()
        title = a.text.strip().strip('19금').strip()
        singer = c.text.strip()
        print(rank, title, singer)

 

'항해 사전강의 주차' 카테고리의 다른 글

항해 99 사전강의 5주차 마지막  (0) 2022.09.30
항해99 사전강의 4주차  (0) 2022.09.28
항해99 사전강의 2주차  (0) 2022.09.24
항해99 사전 강의 1주차  (0) 2022.09.23