스파르타코딩클럽 웹개발 종합반 3주차 완료. 이번 주차는 Python 을 어떻게 다루는지 공부했다. 먼저 문법을 다루고, 라이브러리를 활용하여 네이버 영화목록을 가져와 봤다. 그리고 데이터베이스인 mongoDB 를 다뤘다.

Python

Python 은 일종의 번역팩이라고 생각하면 쉽다. 컴퓨터는 이진법만 알아듣기 때문에, 파이썬 문법으로 된 것을 이진법으로 변환해줄 수 있도록 번역 패키지를 설치하는 것이다. 파이썬은 매우 직관적인 언어이고, 할 수 있는 것도 많지만 개발자들도 모든 문법을 기억하지 않는다. 필요한 건 그때 그때 찾아서 공부해야 기억에 오래 남는다. 굳이 외우지 말자.

파이썬 패키지 사용하기

파이썬 문법은 그렇게 어렵지 않다. Requests 패키지를 설치하여 API 에서 값을 가져와 보자.

Python 에서 패키지는 일종의 기능들을 묶어 놓은 "모듈"을 모아 놓은 단위다. 이런 패키지의 묶음을 라이브러리라고 하는데, 외부 라이브러리를 사용하기 위해서 패키지를 설치한 것.

<script>
<python>

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

r = requests.get('API 주소')
rjson = r.json()

gus = rjson['RealtimeCityAir']['row']		// 상황에 맞게 바꾸기

for gu in gus:
	print(gu['MSRSTE_NM'], gu['IDEX_MVL'])

</python>
</script>

여기서 들여쓰기가 매우 중요하다. 우리가 지금껏 for loop 를 사용하면서 중괄호를 썼는데, 파이썬에서는 중괄호가 ":" 와 들여쓰기로 대체되기 때문이다. 파이썬 사용하면서 매우 중요한 주의할 점.

웹스크래핑(크롤링)

크롤링 기본 세팅 코드.

<script>
<python>

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('사이트 주소', headers = headers)

// HTML 을 BeautifulSoup 이라는 라이브러리를 활용해 검색하기 쉽게
// soup 이라는 변수에 HTML 이 담긴 상태가 됨

// 이제 코딩을 통해 필요한 부분을 추출하면 된다.
soup = BeautifulSoup(data.text, 'html.parser')

#############################
// 코딩 시작
#############################

</python>
</script>

beautifulsoup 내 select

태그 안의 텍스트를 찍고 싶을 때에는 태그.text, 태그 안의 속성을 찍고 싶을 때에는 태그['속성']

<script>
<python>

// 셀렉터 사용하기
soup.select('태그명')
soup.select('.클래스명')
soup.select('#아이디명')

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

// 태그와 속성값으로 찾기
soup.select('태그명[속성="값"]')

// 한 개만 가져오기
soup.select_one('위와 동일')

</python>
</script>

항상 정확하지는 않으나, 크롬 개발자도구를 참고할 수도 있다. 원하는 부분에 커서를 갖다댄 뒤, 마우스 오른쪽 버튼을 클릭하면 Inspect 라고 뜰 것이다. Copy → Copy selector 로 선택자를 복사할 수 있는데, 개인적인 의견이지만 상당히 편리하다고 생각한다.

Database

데이터베이스

데이터베이스에는 두 가지 종류가 있다. 첫 번째는 RDBMS(SQL), 두 번째는 No-SQL 이다.

RDBMS(SQL) 은 엑셀에 데이터를 저장하는 것과 유사하다. 데이터가 적재된 상태에서 갑자기 중간에 열을 하나 더하기는 어렵지만, 행과 열로 정형화되어 있는 만큼 데이터가 일관적이고 분석에도 용이하다.
ex) MS-SQL, My-SQL 등

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

MongoDB

MongoDB 를 설치하고, 크롬의 localhost:27017 로 넘어갔을 때,

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

이렇게 나오면 정상 작동 중인 것이다.

MongoDB라는 프로그램은 프로그램 작동 상태가 눈으로 보이지 않는다. 쉽게 말해서, 컴퓨터에서 Adobe Photoshop 혹은 Logic Pro X 등의 소프트웨어를 작동시키면 화면에 윈도우가 뜨고 우리는 그것을 눈으로 볼 수 있는데, mongoDB 는 그렇지 않다는 것이다. 유식한 말로, 그래픽인터페이스(=GUI)를 제공하지 않는다고 표현한다.

데이터를 저장했는데 눈에 보이지 않는다면 답답할 테니, DB내부를 살펴보기 위한 프로그램을 따로 설치하는데 그것이 바로 Robo3T 이다.

Pymongo

mongoDB 라는 프로그램을 조작하려면 pymongo 라는 라이브러리가 필요하다. 파이썬 라이브러리에서 pymongo 라는 라이브러리를 찾아 설치하자.

pymongo 의 기본 코드는 다음과 같다.

<script>
<python>

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

#############################
// 코딩 시작
#############################
  
</python>
</script>

아래는 데이터베이스에 연결 후, insert 를 이용해 값을 집어넣는 코드이다. 아래는 예시 코드이니 사용할 때에는 입맛에 맞게 특정 변수들의 값을 변경해서 사용하자.

<script>
<python>

from pymongo import MongoClient			// pymongo 임포트
client = MongoClient('localhost', 27017)	// mongoDB 는 27017 포트로 리턴
db = client.dbsparta				// 'dbsparta' 라는 이름의 DB 만들기

// MongoDB에 insert 하기
db.users.insert_one({'name': 'Kelly', 'age': 20})
db.users.insert_one({'name': 'Deo', 'age': 21})
db.users.insert_one({'name': 'Eva', 'age': 22})

// MongoDB에서 결과 값 보기
print(all_users[0])				// 0번째 결과 값을 보기
print(all_users[0]['name']) 			// 0번째 결과 값의 'name'을 보기

for user in all_users:      			// 반복문을 돌며 모든 결과 값을 보기
    print(user)
    
user = db.users.find_one({'name':'bobby'})
print(user)

</python>
</script>

기능 별 코드 요약

<script>
<python>

// Insert (insert_one)
doc = {'name': 'Kelly', 'age': 20}
db.users.insert_one(doc)

// Update
db.users.update_one({'name': 'Kelly'}, {'$set': {'age': 21}})
db.people.update_many(찾을 조건, {'$set': 바꿀 내용 })

// Find (find_one)
user = db.users.find_one({'name': 'Kelly'})
print(user)

// Find, 여기서 _id 값은 제외하고 출력
user_many = list(db.users.find({'age': 21}, {'_id': False}))
print(user_many)

// Delete
db.users.delete_one({'name': 'Kelly'})

</python>
</script>

꾸준히 연습하자.

profile
BC 23'

0개의 댓글