사전 강의 3주 차에서는 파이썬 언어와 mongoDB 데이터 베이스, 페이지의 내용 스크랩 해오기
파이썬 다운로드
반드시 Python 3.8.6 버전을 설치해야 한다. (3.9는 너무 최신 버전이라 오작동하는 라이브러리들이 있어서)
파이썬 다운로드 링크
https://www.python.org/ftp/python/3.8.6/python-3.8.6-amd64.exe
gitBash 다운로드
다음으로 파이썬 기초 문법 공부
기본 연산
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 |