본문 바로가기

항해99/웹개발 종합반

스파르타 코딩클럽 웹개발 종합반 - 3주차 후기

이번 주차에는 파이썬을 이용한 웹 데이터 크롤링 작업과 MongoDB를 연결하여 간단한 CRUD 를 진행했다.

이전 직장에서 RPA를 통하여 웹 크롤링을 진행했던 경험이 있는데, 묘하게 친근감이 느껴졌다.

 

3회차 강의 내용


- Python

파이썬 코드는 자바, 자바스크립트와 비교했을 때 아주 간단하고 직관적으로 이루어져있다.

 

a = 3;
b = 2;

fruit = {'포도','딸기','수박'}

a_dict{
	'name : 'bob'
	'age' : 27
}

변수를 선언할 때 변수타입을 따로 명시하지 않아 비교적으로 코드가 간단하다.

 

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

함수 선언은 위와 같이 진행하고, 중괄호나 리턴타입은 따로 지정하지 않는다.

중괄호를 대신하여 :(콜론)과 들여쓰기를 통해 각 지역을 표시한다. 따라서, 들여쓰기가 매우 중요하다

 

for fruit in fruits:
    print(fruit)

.반복문은 java의 향상된 for문과 비슷해 보인다. 딕셔너리, 배열 타입의 변수를 한개씩 읽어올 수 있다.

 

 

패키지(외부 라이브러리) 사용

프로젝트 별로 외부 라이브러리 적용이 가능하다. 설정에서 패키지를 검색하여 설치할 수 있다.

이번 강의에서는 3가지 패키지를 사용해보았다.

 

requests - Ajax 처럼 서버에서 데이터를 받아올 수 있다.

beautifulsoup - 웹에서 Html 코드를 가져올 수 있다. 웹 크롤링에 사용한다.

pymongo - MongoDB를 연결하여 사용할 수 있다.

 


request 패키지 사용 실습

import requests

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

gus = rjson['RealtimeCityAir']['row']

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

request 패키지를 사용하는 예시이다. 2주차에 진행했던 서울시 미세먼지 API를 사용해서 작업을 진행했다.

Ajax 코드와 유사하게, 서버에 요청한 데이터를 받아와서 원하는 대로 가공하여 사용할 수 있다.


MongoDB 연결

from pymongo import MongoClient
client = MongoClient('mongodb+srv://아이디:패스워드@cluster0.anyknjm.mongodb.net/Cluster0?retryWrites=true&w=majority')
db = client.dbsparta

# 저장 - 예시
doc = {'name':'bobby','age':21}
db.users.insert_one(doc)

# 한 개 찾기 - 예시
user = db.users.find_one({'name':'bobby'})

# 여러개 찾기 - 예시 ( _id 값은 제외하고 출력)
all_users = list(db.users.find({},{'_id':False}))

# 바꾸기 - 예시
db.users.update_one({'name':'bobby'},{'$set':{'age':19}})

# 지우기 - 예시
db.users.delete_one({'name':'bobby'})

mongoDB atlas 가입 후에, DB 생성 및 계정 연결을 진행했다.

위와 같은 문장으로 파이썬 코드로 DB CRUD가 가능하다.


3주차 과제 - 지니뮤직 인기차트 스크래핑

웹에서 개발자도구를 이용하여 원하는 요소의 선택자를 복사하여 사용할 수 있다.

 

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

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

for song in chart:
    rank = song.select_one('td.number').text[0:2].strip()
    title = song.select_one('td.info > a.title.ellipsis').text.strip()
    artist = song.select_one('td.info > a.artist.ellipsis').text
    print(rank, title, artist)

request 패키지와 beautifulsoup 패키지를 조합하여 지니 인기차트 1~50위까지의 데이터를 크롤링하였다.

웹페이지의 html 코드를 soup 변수에 담아 사용할 수 있다. 웹에서 목표 요소의 선택자를 복사하여 원하는 값을 지정할 수 있다. 

 

코드 실행 결과


3주차 후기

웹 데이터를 가공하는 작업과 DB 연결 및 CRUD 작업을 진행했는데, 쉽게 설명이 되어서 금방 따라할 수 있었다.

NoSQL 종류의 DB는 처음 사용해보았는데, 간편한 파이썬과 함께 이용하니 더 쉽게 접근이 가능했다.

 

한 주마다 계속 다른 종류의 언어로 수업을 진행하고 있는데, 한 개 언어에 익숙해질 즈음에 다른 언어를 배우게 되어

문법이 머릿 속에서 정리가 안되는 느낌이 있다. 수업 자체가 빠르게 진행이 되는 관계로, 필기를 꼼꼼히 해둘 필요가 있을 것 같다. 

 

웹개발 종합반과 코딩테스트 문제 풀이로 인하여 자바의 정석 진도를 못나가고 있다. 학습 시간을 늘리거나, 시간을 잘 배분해서 사용할 필요를 느겼다.