웹개발 종합반 3주차 개발일지

임준수·2022년 3월 29일
0

1. 수업목표

1) 파이썬 기초 문법을 안다.

2) 페이지 크롤링하기

3) pymongo를 통해 mongoDB를 제어할 수 있다.

2. 배운것들

1) 파이썬 기초 문법

모든 프로그래밍 언어에는 변수, 자료형, 함수, 조건문, 반목문 5가지를 기억해야한다.
파이썬은 들여쓰기 중요!

변수

a = 1
b = 2
print(a + b) ---> 결과로 3이 나온다.

javascript와 달리 let을 쓸 필요가 없다. (let a = 3)

자료형

List형
a_list = ['사과','배','감']
a_list.append('수박') ---> a_list에 수박을 추가
a_list[2] ---> 감

a_list.append(['딸기','수박']) ---> a_list = ['사과','배','감',['딸기','수박']]이 된다.
여기서, a_list[3][0]은 딸기이다.

Dictionary형

a_dict = {'name':'bob','age':'25'}
a_dict['height'] = 170 --->로 a_dict에 'height':'170' 추가
a_dict['name'] ---> 'bob'

List형과 Dictionary형의 조합
people = [{'name':'bob','age':'25'},{'name':'kyle','age':'30'}]
people[1]['name'] ---> 'kyle'

person = {'name':'joon','age':'15'}
people.append(person) ---->[{'name':'bob','age':'25'},{'name':'kyle','age':'30'},{'name':'joon','age':'15'}]

함수형

def 함수이름(a,b,c):
return a+b+c
result = 함수이름(1,2,3) ---> 6
(javascript는 function 함수이름(a,b,c){return a+b+c}였다.)

조건문

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

is_adult(21) ---> 성인

반복문

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

for fruit in fruits:
print(fruit) ---> 사과 배 감이 하나씩 찍힌다.

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

count = 0
for fruit in fruits:
if fruit == '배':
count += 1

print(count) ---> 2(개수를 알 수 있다.)

2) 크롤링하기

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

requests 패키지를 설치한다. Ajax 역할을 해준다고 한다.

import requests 

r = requests.get('url')
rjson = r.json() 를 추가하여 사용한다.

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

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

rows = rjson['RealtimeCityAir']['row']

for row in rows:
	print(row['MSRSTE_NM'],row['IDEX_MVL'])

크롤링 기초

bs4 패키지를 추가 설치한다.

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('url',headers=headers)

soup = BeautifulSoup(data.text, 'html.parser')를 추가하여 사용한다.

soup.select나 soup.select_one을 이용하여 필요한 것을 가져온다.

가져올 정보를 검사-복사-selector 복사로 가져와서 앞부분의 공통인 부분을 가져온다.

(1. #body-content > div.newest-list > div > table > tbody > tr:nth-child(1) > td.info > a.title.ellipsis
2. #body-content > div.newest-list > div > table > tbody > tr:nth-child(2) > td.info > a.title.ellipsis
일 경우 #body-content > div.newest-list > div > table > tbody > tr가 공통)

trs = soup.select('여기 넣는다')

다음에는 반복문을 돌린다.

for tr in trs:
	title = component.select_one('뒷부분을 복사해온다.').text.strip()
	rank = component.select_one('td.number').text[0:2].strip()
	artist = component.select_one('td.info > a.artist.ellipsis').text
	print(rank,title,artist)
를 통해 원하는 정보를 가져온다.

여기서 .text는 문자만을 가져오고, [0:2]로 앞의 두 글자만 끊어오거나, .strip()으로 빈공간을 삭제할 수 있다.

3) pymongo를 통해 mongoDB를 제어하기.

DB를 사용하는 이유 : 정보를 잘 찾아오기 위해서

DB에는 Index라는 순서로 데이터들이 정렬되어있다.

DB는 우리가 쓰는 프로그램과 같은 것이다.

그 중 mongoDB Atlas를 이용하여 배우는 것.
pymongo와 dnspython 패키지를 설치한다.

from pymongo import MongoClient
client = MongoClient('mongodb+srv://아이디:비밀번호@cluster0.6mof6.mongodb.net/Cluster0?retryWrites=true&w=majority')
db = client.폴더이름 --->를 추가하여 사용한다.

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. 느낀점, 보완점

웹개발 종합반을 들으면서 처음으로 머리에 잘 안들어온다는 느낌을 받았다. 강의를 보고 따라하면서 왜 이렇게 코드를 짜고, 작동이 되는지 이해를 하면서 들어야 습득이 빠를거 같은데 시키는대로만 하니까 받아들이기 어렵다고 느끼는 것 같다. 마침 파이썬 문법 뽀개기 강의를 수강할 수 있어서 3주차 예제들과 숙제들을 반복 학습하면서 파이썬 문법 뽀개기 강의를 함께 들어야겠다.

0개의 댓글

관련 채용 정보