웹개발 종합반[내일배움단] - 3주차

3주차에서는 Python, 크롤링, mongoDB를 공부한다.
3주차까지 해보니 스파르타코딩클럽은 다음주차 수업을 시작할 때 전주차를 꼭 복습하는 시간이 있어서 참 좋다.


  1. 파이썬 기초 문법을 안다.
  2. 원하는 페이지를 크롤링 할 수 있다.
  3. pymongo를 통해 mongoDB를 제어할 수 있다.
3주차의 궁극적인 목표

파이썬 시작하기

파이썬은 들여쓰기로 블록 단위를 나눈다.
들여쓰기가 틀릴 경우 오류가 발생하니 주의가 필요하다.
자바스크립트 상에서 {} (중괄호)를 쓰던 부분들은 : (콜론)으로 대체되기도 한다.

파이썬 기초 문법

변수 & 기본연산

a = 1
b = 2;
num1 = a*b

# let 같은 키워드 없이 바로 변수를 생성 및 할당.
# 변수명에 제한이 없다.

자료형

숫자형, 문자형
name = 'bob'
num = 12
is_number = True #'Boolean'형이 들어갈 수도 있다.
리스트형(JavaScript의 배열형과 동일)
a_list = ['사과', '귤', '배']
a_list.append('바나나') # 리스트 마지막에 '바나나'추가
a_list.pop() # 리스트중 마지막부분을 반환하고 삭제
Dictionary 형 (Javascript의 dictionary형과 동일)
a_dict = {'name':'bob','age':21}
a_dict['height'] = 178 # a_dict의 값은? {'name':'bob','age':21, 'height':178}

eople = [{'name':'bob','age':20},{'name':'carry','age':38}]
# 자바스크립트와 마찬가지로 리스트형과 딕셔너리형 조합 가능

함수

# 구조
def 함수명(변수명) :
    명령문
    
# 예시
def sum_all(a,b,c):
    return a+b+c

def mul(a,b):
    return a*b

result = sum_all(1,2,3) + mul(10,10)
    
# 주의
def로 선언하고 중괄호 대신 : 콜론 사용
명령문 앞에 띄워쓰기가 필수. 안그러면 에러가 발생한다.

조건문

# 예시
if num % 2 == 0: # num을 2로 나눈 나머지가 0이면
    return True  # True (참)을 반환한다.
else:            # 아니면,
    return False # False (거짓)을 반환한다.

# 주의
함수와 마찬가지. 중괄호 대신 : 콜론 사용
띄워쓰기가 제대로 되지 않으면 오류가 발생한다.

반복문

파이썬의 반복문은, 리스트의 요소들을 하나씩 꺼내쓰는 형태로, 무조건 리스트와 함께 쓰인다!

# 예시
fruits = ['사과','배','감','귤']

for result in fruits:
    print(result)
    
# 주의
fruits 안의 원소들을 하나씩 꺼내서
result 라는 변수로 옮긴다고 보면 됨.
print는 result로 옮겨진 원소를 하나씩 출력함.
    
# 응용
def count_fruits(target):
    count = 0
    for fruit in fruits:
        if fruit == target:
            count += 1
    return count

subak_count = count_fruits('수박')
print(subak_count) #수박의 갯수

gam_count = count_fruits('감')
print(gam_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'])


# 이번엔, 반복문과 조건문을 응용한 함수를 만들어봅시다.
# 이름을 받으면, age를 리턴해주는 함수
def get_age(myname):
    for person in people:
        if person['name'] == myname:
            return person['age']
    return '해당하는 이름이 없습니다'


print(get_age('bob'))
print(get_age('kay'))

파이썬 패키지 설치 및 사용

패키지는 모듈(기능들의 묶음)을 모아놓은 단위. 이런 패키지 묶음을 라이브러리라 한다. 즉, 패키지 설치 = 외부 라이브러리 설치를 의미

가상 환경이란?

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

pip(python install package)

앱을 설치할 때 앱스토어/플레이스토어를 가듯이, 새로운 프로젝트의 라이브러리를 가상환경(공구함)에 설치하려면 pip 를 이용하게 됨.

패키지 사용해보기

스크래핑 기본 세팅

import requests
from bs4 import BeautifulSoup

# 타겟 URL을 읽어서 HTML를 받아오고,
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)

# HTML을 BeautifulSoup이라는 라이브러리를 활용해 검색하기 용이한 상태로 만듦
# soup이라는 변수에 "파싱 용이해진 html"이 담긴 상태가 됨
# 이제 코딩을 통해 필요한 부분을 추출하면 된다.
soup = BeautifulSoup(data.text, 'html.parser')

# select를 이용해서 tr들을 불러오기
movies = soup.select('#old_content > table > tbody > tr')

# movies(tr들)의 반복문 돌리기
for movie in movies:
    a_tag = movie.select_one('td.title > div > a')
    # movie 안에 a가 있으면,
    if a_tag is not None: # 빈칸 등 의외의 구성요소를 제외하기 위한 구문
    	# a의 text를 찍어본다.
        print(a_tag.text)

beaufitulsoup 내 select에 미리 정의된 다른 방법들

# 선택자를 사용하는 방법
soup.select('태그명')
soup.select('.클래스명')
soup.select('#아이디명')

soup.select('상위태그명 > 하위태그명 > 하위태그명')
soup.select('상위태그명.클래스명 > 하위태그명.클래스명')

# 태그와 속성값으로 찾는 방법
soup.select('태그명[속성="값"]')

# 한 개만 가져오고 싶은 경우
soup.select_one('태그명[속성="값"]')

크롬 개발자 도구를 사용해서 참고하기

  1. 원하는 부분에서 마우스 오른쪽 클릭 -> 검사
  2. 원하는 태그에서 마우스 오른쪽 클릭
  3. Copy -> Copy selector로 선택자를 복사할 수 있음

DB개괄

DB의 종류

RDBMS(SQL)

행/열의 생김새가 정해진 엑셀에 데이터를 저장하는 것과 유사함. 정형화 되어있는 만큼, 데이터의 일관성이나 분석에 용이할 수 있으나 그만큼 자유롭게 데이터를 적재할 수 없음.
ex) MS-SQL, My-SQL 등

No-SQL

딕셔너리 형태로 데이터를 저장해두는 방식. 데이터마다 다른 형식으로 갑승ㄹ 가질 수 있어 자유로운 형태의 데이터 적재에 유리한 대신, 일관성이 부족할 수 있음.
ex) MongoDB

DB설치 확인

MongoDB

맥의 경우 brew메뉴를 통해서 mongoDB를 설치할 수 있다.

먼저 brew를 설치하고

/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)"

mongoDB를 설치한다.

brew tap mongodb/brew # 이 줄 먼저 실행하고
brew install mongodb-community # 완료되면 이 줄 실행

크롬 창에 localhost:27017이라고 쳤을 때
It looks like you are trying to access MongoDB over HTTP on the native driver port.
라고 문구가 나온다면 mongoDB가 정상 작동하는 것이다.

Robo3T

mongoDB 프로그램은 눈에 보이지 않는다. (=GUI를 제공하지 않는다.)
DB내부를 살펴보기 위해 GUI를 제공하는 별도의 프로그램이 필요하다.

다운로드 : https://robomongo.org/download

pymongo로 DB조작하기

가장 중요한 4가지는 저장하기, 찾기, 바꾸기, 지우기다.

from pymongo import MongoClient           # pymongo를 임포트 하기(패키지 인스톨 먼저 해야겠죠?)
client = MongoClient('localhost', 27017)  # mongoDB는 27017 포트로 돌아갑니다.
db = client.dbsparta                      # 'dbsparta'라는 이름의 db를 만듭니다.

# MongoDB에서 데이터 모두 보기
all_users = list(db.users.find({}))

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

공백제거 및 슬라이싱

스크래핑시 여백이 있다거나 다른 글씨가 나와서 해당부분을 지우고 싶을 때 아래의 파이썬 문법을 이용한다.

strip([chars) : 양쪽에서 제거
lstrip([chars]) : 왼쪽에서 제거
rstrip([chars]) : 오른쪽에서 제거
chars를 비워두면 공백을 지움

ex) 공백제거
str = ' good '
str.stript() # 'good'
str.lstript() # 'good '
str.rstript() # ' good'

ex) 슬라이싱
a = list
print(a[1:3])
'is'

좋은 웹페이지 즐겨찾기