웹개발 종합반 - 3주차

su·2023년 4월 28일
0

웹공부

목록 보기
3/4
post-thumbnail

파이썬

파이썬 설치

  • 일종의 번역팩 설치의 느낌

파이썬 - 터미널(Terminal)

  • 사용자가 텍스트로 명령어 입력 → 결과를 텍스트로 화면에 출력해주는 도구
  • 파이썬 라이브러리 설치, 파이선 프로젝트 실행 시 사용됨
  • 명령어를 적어 작동시키는 것이 빠르고 편하기 때문에 사용됨

파이썬 기초 문법

변수

a = 3
b = a
a = a + 1
num1 = a * b
num2 = 99
# 변수의 이름은 마음대로 지정 가능
# 하지만 직관적으로 알아볼 수 있는 변수명을 사용하는 것이 좋음 !

숫자, 문자형

name = 'bob'
num = 12
is_number = True

리스트 형 (List)

a = ['두준', '요섭', '기광', '동운]
print(a[0]) # 두준

딕셔너리 형 (Dictionary)

a = {'name' : '두준', 'age' : 33}
# a 값: {'name' : '두준', 'age' : 33}
# a['name'] : 두준

함수 (Fuction)

  • 함수 이름은 마음대로 지정 가능
f(x) = 3*x + 2
y = f(2)
print(y) # 8
#함수 정의
def f(x) :
	return 3*x + 2
y = f(2)
print(y) # 8
  • 함수 응용
def call() :
	print("하이")
    #들여쓰기 주의하기
call() # 하이
def sum (a,b,c) :
	return a+b+c
result = sum(3,2,1)
print(result) # 6

조건문

age = 24
if (age > 20) :
	print("성인")
else :
	print("청소년")

반복문

  • 리스트의 요소들을 하나씩 꺼내쓰는 형태
members = ['두준', '요섭', '기광', '동운]
for m in members:
	print(m)

조건문 + 반복문

ages = [14,16,33,32,20,32,15,31]
for a in ages:
	if (a > 20) :
    	print("성인")
    else :
    	print("청소년")

파이썬 패키지

  1. 폴더 생성과 가상환경
  • 가상환경 venv : 패키지를 담아두는 공구함
    - 가상환경(Virtual Environment): 같은 시스템에서 실행되는 다른 파이썬 응용 프로그램들의 동작에 영향일 미치지 않기 위해서 파이썬 배포 패키지들을 설치 혹은 업그레이드를 가능하게 하는 격리된 실행 환경
    • (출처: 파이썬 공식 용어집)
  1. venv 생성하기
  • Ctrl + ` 을 눌러 터미널 실행
  • python -m venv venv 를 실행
  1. venv 활성화하기
  • 하단의 {}python 옆의 이름이 (venv:venv)로 되어 있는지 확인
  • 터미널에서 (venv)라고 뜨면 가상환경 활성화 완료
  1. 파이썬 패키지 설치하기
    • 패키지 설치 = 외부 라이브러리 설치
    • 패키지는 모듈(기능들 묶음)을 모아놓은 단위
    • 패키지의 묶음을 라이브러리 라고 할 수 있음
  • requests 패키지 설치해보기
    - 터미널 열기
    - requests 패키지 설치 (pip install requests)

패키지 사용하기

Requests 라이브러리 사용해보기

import requests 
r = requests.get('가져오고싶은 OPEN API 링크')
rjson = r.json()
print(rjson)

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

크롤링 준비

  1. 패키지 추가 설치하기 (beautifulsoup4)
  • 터미널에서 가상환경 활성화 확인 후 pip install bs4 실행
  1. 크롤링 기본 세팅
import requests
from bs4 import BeautifulSoup
URL = '가져오려는 URL'
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')

3.select / select_one 사용법
(태그 안의 텍스트: 태그.text / 태크 안의 속성: 태그['속성'])

  • 어떤 뼈대를 가져와야 할까?
    - 원하는 부분에서 검사 - Copy - Copy selector
    변수명 = soup.select_one('가져온선택자').text
    print(변수명)

추가 문법

선택자 사용 방법

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

태그와 속성값으로 찾는 방법

soup.select('태그명[속성 = '']')

한 개만 가져오고 싶은 경우

soup.select_one('위와 동일')

DB

DB를 쓰는 이유

  • 데이터를 잘 넣어두고 나중에 잘 찾기 위해서
  • 우리 눈에 보이지 않지만 DB는 index라는 순서로 데이터가 정렬되어 있음

DB의 두 가지 종류

  • RDBMS (SQL)
    - 행/열의 생김새가 정해진 엑셀에 데이터 저장과 유사.
    • 갑자기 중간에 열을 하나 더하기는 어려울 것
    • 정형화되어 있어 데이터 일관성/분석에 용이
    • ex. MS-SQL, My-SQL 등
  • No-SQL
    - 딕셔너리 형태로 데이터를 저장해두는 DB
    • 데이터 하나 하나 마다 같은 값을 가질 필요 없음
    • 자유로운 형태의 데이터 적재에 유리한 반면 일관성이 부족할 수 있음
    • ex. mongoDB

DB 란
- DB는 아주 간단히, 우리가 쓰는 프로그램과 같은 것
- 요새는 Cloud 형태로 제공해주는 곳들이 많음
- 사용자가 몰리거나 / DB 백업 / 모니터링이 용이하기 때문

mongoDB 시작 & 연결

mongoDB - Atlas 가입하기

  • 가입 후 연결
    - Network Access에서 Allow Access from Anywhere → Add IP address
    • 데이터 베이스 첫 번째 페이지에서 좌측 메뉴 Network Access
    • mongoDB 모든 IP 허용
    • Database connect → Create Database User 클릭
    • Choose a connection method 클릭 후 Username, Password 입력

mongoDB - Atlas 연결

  • 터미널 (Ctrl + `) 열고 (venv) 가상환경 활성화 확인
  • pip install pymongo dnspython 입력 후 엔터
  • pymongo 기본 코드
    from pymongo import MongoClient
    client = MongoClient('여기에 URL 입력')
    db = client.db이름
  • Python - mongoDB 연결
    - mongo atals 화면에서 Connect 클릭
    • 연결 방법 Drivers → Driver:Python, Version: 3.6 or later
    • 생성된 하단의 링크를 복사하여 url 부분에 붙여넣기
  • 연결 테스트
doc = {
	'name' : '두준',
    'age' : 33
}
db.user.insert_one(doc)
# 실행 후 Collections 확인하기

pymongo로 DB 조작

DB연결 & 데이터 삽입

# users라는 collection에 넣음
db.users.insert_one({'name':'두준', 'age':33})
db.users.insert_one({'name':'요섭', 'age':32})
db.users.insert_one({'name':'기광', 'age':32})
db.users.insert_one({'name':'동운', 'age':31})

결과 값 보기(전부)

all_users = list(db.users.find({}, {'_id':False}))
print(all_users[0]) 		# 0번째 값
print(all_users[0]['name']) # 0번째 값의 'name'
for a in all_users: 		# 반복문을 돌며 모든 결과값 확인
	print(a) 

특정 결과 값 보기

user = db.users.find_one({})
print(user)

값 수정하기

db.users.update_one({'name':'두준'}, {'$set':{'age':32}})
user = db.users.find_one({'name':'두준')
print(user)

값 삭제하기 (거의 사용하지 않음)

db.users.delete_one({'name':'두준'})
user = db.users.find_one({'name':'두준'})
print(user)

웹스크래핑(크롤링) 결과 저장

insert - 웹스크래핑 결과 DB에 저장하기

# 영화 가져오기
import requests
from bs4 import BeautifulSoup

from pymongo import MongoClient
client = MongoClient('URL')
db = client.db이름
	
URL = '가져올링크'
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')

video_list = soup.select("가져온 선택자")
for v in video_list :
	rank = v.select_one(".클래스명").text
    title = v.select_one(".클래스명").text.strip("\n")
    rate = v.select_one(".클래스명").text
    doc = {
    	'title' : title, 
        'rank' : rank,
        'rate' : rate
    }
    db.movies.insert_one(doc)
profile
(❁´◡`❁)

0개의 댓글