3주차(웹개발 종합반)

정길규·2023년 5월 17일

Python 기본 문법

변수 & 기본연산

a = 3      # 3을 a에 넣는다
b = a      # a를 b에 넣는다
a = a + 1  # a+1을 다시 a에 넣는다

num1 = a * b # a*b의 값을 num1이라는 변수에 넣는다
num2 = 99 # 99의 값을 num2이라는 변수에 넣는다

자료형

숫자, 문자형

name = 'bob' # 문자형
num = 12 # 숫자형

is_number = True # True 또는 False -> "Boolean"형

리스트

a=['사과','배','감']
print(a)  # ['사과','배','감']
print(a[0]) # 사과

dictionary형

a= {}
a= {'name':'영수','age':24}

print(a)  # {'name':'영수','age':24}
print(a['name'])  # 영수

함수

함수의 이름은 마음대로 정할수 있다.

def 함수이름(매개변수):
	함수의 기능
# e.g.

def f(x):
	return 2 * x + 5
    
y = f(2)
print(y)  # 9

조건문

# e.g.

age = 25

if age > 20:
	print('성인입니다.')
else:
	print('청소년입니다.)
    
# 실행시 '성인입니다.' 출력    

반복문

파이썬에서는 리스트의 요소를 하나씩 꺼내는 형태.

# e.g.

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

for fruit in fruits:
	print(fruit)

# 사과, 배, 감, 귤 하나씩 꺼내어 찍힙니다.

requests 라이브러리

Javascript의 Fetch라이브러리와 비슷하게 URL의 JSON형태의 데이터를 가져오는데 사용함.

requests 기본 골격

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

r = requests.get('가져오고 싶은 URL')
rjson = r.json()

웹스크래핑 기본 세팅

import requests
from bs4 import BeautifulSoup

URL = "https://movie.daum.net/ranking/reservation"
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')

## 다음 영화랭킹 크롤링 해보기

lis = soup.select('#mainContent > div > div.box_ranking > ol > li')

for li in lis:
    rank = li.select_one('.rank_num').text
    title = li.select_one('.link_txt').text.strip()    # .strip 앞뒤 공백을 없애줌.  .replace(a, b) a를 b로 치환
    rate = li.select_one('.txt_grade').text
    print(rank, title, rate)
# 선택자를 사용하는 방법 (copy selector)
soup.select('태그명')
soup.select('.클래스명')
soup.select('#아이디명')

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

# 태그와 속성값으로 찾는 방법
soup.select('태그명[속성="값"]')

# 한 개만 가져오고 싶은 경우
soup.select_one('위와 동일')

DB

왜 DB를 사용하는가?
DB는 저장을 잘하는 것 보다 저장된 데이터를 잘 가져오는게 데이터베이스의 역할이다.
데이터베이스는 크게 두가지로 구분된다.(SQL, NoSQL)

  • RDBMS(SQL)

    행/열의 생김새가 정해진 엑셀에 데이터를 저장하는 것과 유사함. 예를 들어 데이터가 50만 개가 적재된 상태에서, 갑자기 중간에 열을 하나 더하기는 어렵다. 그러나, 정형화되어 있는 만큼, 데이터의 일관성이나 / 분석에 용이할 수 있다.

  • NoSQL

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

pymongo로 DB 조작하기

python 라이브러리인 pymongo, dnspython을 설치

pymongo 기본 코드

from pymongo import MongoClient
client = MongoClient('여기에 URL 입력')
db = client.dbsparta

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

마치며

오늘은 python을 통해 웹스크래핑과 db와 연결하는 방법에 대해서 학습을 하였다. 앞에서의 내용을 학습하면서는 이런걸로 뭘 할수 있지 라는 생각이 많았는데 오늘 배운 내용은 지금 바로 써먹을수 있는 내용이라서 학습에 재미를 느낄 수 있었다. 매일 ctrl + c, ctrl + v 만 하는 것 같지만... 잘하고 있는지 고민이 되긴한다.

0개의 댓글