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

연주·2022년 6월 6일
0
post-thumbnail

3주차 수업목표🏆

  1. 파이썬 기초 문법을 안다.
  2. 원하는 페이지를 크롤링 할 수 있다.
  3. pymongo를 통해 mongoDB를 제어할 수 있다.

📌 파이썬!

파이썬은 매우 직관적인 언어이고, 할 수 있는 것도 많다!
모든 문법을 외우려고 하지말고 필요한 것들은 구글링해서 찾아본다는 생각으로!

📌 파이썬 문법

- 변수

a = 2
b = 3

print(a+b)

5 // 결과값으로 5가 출력
- 리스트형

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

print(a_list[1])

배 // 결과값으로 배  출력


a_list.append('수박')

print(a_list)

['사과','배','감','수박']  // 결과값으로 수박이 추가되어 출력
- 딕션너리형

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

print(a_dict['nama'])

bob // 결과값으로 bob 출력
-함수

def sum(a,b):
	return a+b

result = sum(1,2)
print(result)

3 // 결과값으로 3 출력
- 조건문

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

is_adult(25)


성인입니다 // 결과값으로 성인입니다 출력값
-반복문
-리스트형

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

count = 0
for fruit in fruits:
	if fruit == '사과':
		count +=1
	
print(count)

2 // 결과값으로 2 출력


- 딕셔너리 형
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:
	if person['age'] > 20:
		print(person['name'])

carry
ben      // 결과값으로 carry, ben 출력

📌파이썬 패키지

패키지? 라이브러리?
Python 에서 패키지는 모듈(일종의 기능들 묶음)을 모아 놓은 단위입니다.
이런 패키지 의 묶음을 라이브러리 라고 볼 수 있습니다.
지금 여기서는 외부 라이브러리를 사용하기 위해서 패키지를 설치합니다.
즉, 여기서는 패키지 설치 = 외부 라이브러리 설치!

가상 환경(virtual environment)
라이브러리를 모아두는 곳

📌 패키지 사용해보기

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

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

rows = r.json['RealtimeCityAir']['row']

for row in rows:
gu_name = row['MSRSTE_NM']
gu_mise = row['IDEX_MVL']

📌 웹스크래핑(크롤링) 기초

title = soup.select_one('#old_content > table > tbody > tr:nth-child(2) > td.title > div > a')

print(title.text)

밥정 // 결과값으로 밥정


movies = soup.select('#old_content > table > tbody > tr')

for movie in movies:
    a = movie.select_one('td.title > div > a')
    if a is not None:
	print(a.text)

// 결과값으로 영화명 쭉나옴

📌 웹스크래핑(크롤링) 연습

  • 순위, 타이틀, 평점 나오게
movies = soup.select('#old_content > table > tbody > tr')
for movie in movies:
    a = movie.select_one('td.title > div > a')
    if a is not None:
        title = a.text
        rank = movie.select_one('td:nth-child(1) > img')['alt']
        star = movie.select_one('td.point').text
        doc = {
            'title':title,
            'rank':rank,
            'star':star
        }
        db.movies.insert_one(doc)

📌 DB개괄

DB는 나중에 잘 찾아 쓰기 위해서, 순서들이 잘 정렬되있어서 한 번에 잘 뽑아가기위해
결과적으로, 잘 뽑아쓰기 위해서 저장!!

DataBase의 두가지 종류

  • SQL
    칸을 만들어 두고 채우는 느낌
    정형화 되있기 때문에 찾을 때 빨리 찾을 수 있음,
    중간에 다른 종류를 넣기는 힘듦
  • NoSQL(Not only SQL)
    정해진 칸이 없고 들어온 대로 쌓는 느낌
    유연하게 대처할 수있음

DB는 프로그램!
데이터를 잘 쌓고, 잘 찾아쓸 수 있게 해주는 프로그램~!
클라우드 환경에서 제공해주는 DB프로그램

📌 pymongo로 DB조작하기

pymongo 코드 요약!!

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

📗3주차 숙제

지니뮤직의 1~50위 곡을 스크래핑 해보세요.

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

trs = soup.select('#body-content > div.newest-list > div > table > tbody > tr')
for tr in trs:
    rank = tr.select_one('td.number').text[0:2].strip()
    title = tr.select_one('td.info > a.title.ellipsis').text.strip()
    artist = tr.select_one('td.info > a.artist.ellipsis').text
    print(rank,title,artist)

이상하게 혼자 할 때는 결과값이 안나왔는데, 답안보고 따라하니까 너무 쉽게 나와서 조금 허탈했다.
혼자서 다시 연습을 해봐야겠다.


💬 파이썬은 처음 다뤄서 그런가 따라가는 속도가 안나오긴 했는데, 더군다나 파이썬, 크롤링, 데이터베이스 다양한 걸 배워서 머리 속에 더 잘 안들어가는 느낌이기도 했다.
그래도 파이썬이 진짜 간단하고 익혀두면 엄청 도움이 될 거 같은!!

profile
성장중인 개발자🫰

0개의 댓글