본문 바로가기
항해99

웹개발 종합반_3주차

by Hyeon_E 2023. 4. 7.

※ TypeError: Cannot read properties of undefined (reading 'forEach')

forEach를 쓸때 이 에러가 뜨면 안에 내용이 없어 undefined이 뜬것이기에 데이터가 잘있는지 이름을 잘 써주었는지 확인

 

[ 파이썬 시작하기 ]

파이썬을 설치한다는 것은 일종의 번역팩을 설치한다고 생각하면 됨

컴퓨터는 2진법만 알아듣기 때문에 파이썬 문법으로 된것을 2진법으로 변환해줄 수 있도록 번역패키지를 설치하는 것

 

VSCode에 확장프로그램을 이용하여 python을 설치받고 .py파일을 만든다음 코드를 쓰고 터미널로 파일을 실행시킴

 

[ 파이썬 기초공부 ]

▶ 변수 & 기본연산

a = 3     
b = a     
a = a + 1  

num1 = a*b
num2 = 99

변수의 이름은 마음대로 지을 수 있음

▶ 자료형

name = 'bob' # 문자열

num = 12 # 숫자

is_number = True # Boolean(True, False)

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

a= {}	# Dictionary, a의 값: {'name':'영수','age':24}
a= {'name':'영수','age':24 }	# a['name']의 값: '영수'

▶ 함수

def f(x):
	return 2*x+3

y = f(2)  # 7
def hey():
	print("헤이")
hey() #헤이

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

result = sum(1,2,3)
print(result) # 6

파이썬에서 함수 생성시, 들여쓰기는 매우 중요함

▶ 조건문

age = 25
if age > 20:
	print("성인입니다")
else:
	print("청소년입니다")

if / else로 구성되어 있음

▶ 반복문

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

for fruit in fruits:
	print(fruit)

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

파이썬 에서의 반복문은, 리스트의 요소들을 하나씩 꺼내쓰는 형태

 

조건문과 반복문 함께 사용한 예시

ages =[5,10,13,23,25,9]
for a in ages:
	if a>20:
		print("성인입니다")
	else:
		print("청소년입니다")

 

 

[ 파이썬 패키지 설치하기 ]

▶ 가상환경

가상환경(virtual environment)은 같은 시스템에서 실행되는 다른 파이썬 응용 프로그램들의 동작에 영향을 주지 않기 위해, 파이썬 배포 패키지들을 설치하거나 업그레이드하는 것을 가능하게 하는 격리된 실행 환경

 

그래서 가상환경을 이용하여 각각의 가상환경 만들어서 각 프로젝트가 서로 다른 패키지 문제를 일으키지 안도록 프로젝트를 진행함

▶ venv 생성하여 활성화 하기

터미널을 열어

python -m venv venv

입력

 

그러면 venv 폴더가 폴더 내부에 생성됨

오른쪽 밑에 인터프리터를 python(venv)으로 변경

터미널을 열으면 바로 (venv)가 붙어 있는것을 알수 있음(가상환경이 활성화 된것을 의미함)

이 폴더에서 라이브러리를 가져다 쓰는 거라는 의미임

▶ 파이썬 패키지(package) 설치하기

파이썬에서 패키지 설치란 외부라이브러리를 설치하는 것

  • Python 에서 패키지는 모듈(일종의 기능들 묶음)을 모아 놓은 단위
  • 이런 패키지 의 묶음을 라이브러리 라고 볼 수 있음
  • 터미널에 pip install 라이브러리이름

앱을 설치할때 스토어를 다운받듯 새로운 프로젝트의 라이브러리 가상환경에 설치하려면 pip를 이용하게 됨

 

터미널을 열어

pip install requests

입력

 

requests는 라이브러리 이름 사용법을 알고 싶다면 구글링하여 알아보면 됨^^

 

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

크롤링이란 웹에 접속해서 데이터를 솎아내어 가져오는 것

- 가상환경에서 진행하려면 인터프리터가 venv로 되어있는지 터미널에 (venv)켜져 있는지 항상 확인해야 함

▶ 패키지 설치하고 기본 세팅

터미널을 열고

pip install bs4

입력. bs는 BeautifulSoup의 약자

 

크롤링 기본 세팅(기본 코드)

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

파일 맨 위쪽에 배치

웹을 접속하는데는 requests를 사용하고 솎아내어 가져오는데 bs4를 사용

▶  select / select_one의 사용법

태그에서 원하는것 얻어내기

  • 태그 안의 텍스트를 찍고 싶을 때: 태그.text
  • 태그 안의 속성을 찍고 싶을 때: 태그['속성']

먼저 개발자도구에서 어떤 뼈대를 가져와야 하는지 찾음

  1. 원하는 부분에서 마우스 오른쪽 클릭 → 검사
  2. 원하는 태그에서 마우스 오른쪽 클릭
  3. Copy → Copy selector로 선택자를 복사할 수 있음

사용법

  • 선택자를 사용하는 방법 (copy selector)
    • soup.select('태그명')
    • soup.select('.클래스명')
    • soup.select('#아이디명')
    • soup.select('상위태그명 > 하위태그명 > 하위태그명')
    • soup.select('상위태그명.클래스명 > 하위태그명.클래스명')
  • 태그와 속성값으로 찾는 방법
    • soup.select('태그명[속성="값"]')
  • 한 개만 가져오고 싶은 경우
    • soup.select_one('위와 동일')

select_one을 이용해서 제목을 가져오게 되면

title = soup.select_one("#mainContent > div > div.box_ranking > ol > li:nth-child(1) > div > div.thumb_cont > strong > a").text
print(title)

이런식이 됨

 

- 제목을 출력했는데 공백이 많다면, strip()을 이용(strip()을 사용했는데도 공백이 많다면 strip('\n'))

- 크롤링을 하다보면 공백이나 필요없는 부분으로 고생을 하게 되는데 이때 text[0:2]

text를 원하는 부분만 가져오거나 strip()을 이용해서 공백에서 끊으면 자신이 원하는 부분을 이쁘게 가져올 수 있음

- 혹은 .replace(")라고 해서 어떤 특정 문자를 없애 줄수 있음

ex) replace(',', '') → 콤마(,)를 없애줌

[ DB개괄 ]

▶ DB를 쓰는 이유

  • 잘 저장해두기 위해
  • 잘 찾기 위해

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

▶ DB의 두가지 종류

RDBMS(SQL)

행/열의 생김새가 정해진 엑셀에 데이터를 저장하는 것과 유사

데이터 50만 개가 적재된 상태에서, 갑자기 중간에 열을 하나 더하기는 어려울 것

그러나, 정형화되어 있는 만큼, 데이터의 일관성이나 / 분석에 용이할 수 있음

틀이 정해져 있다보니 사람이 실수할 일이 적기에 대기업이나 비즈니스가 크게 바뀌지 않는 곳에 좋음

또한 틀이 정해져 있다보니 DB입장에서는 조금 더 빠르게 데이터를 가져올 수 있음

ex) MS-SQL, My-SQL 등

 

No-SQL

딕셔너리 형태로 데이터를 저장해두는 DB

고로 데이터 하나 하나 마다 같은 값들을 가질 필요가 없게 됨

자유로운 형태의 데이터 적재에 유리한 대신, 일관성이 부족할 수 있음

비즈니스의 유연성을 크게 담보하기에 비즈니스가 변할수 있는 스타트업에 좋음

ex) MongoDB

▶ DB의 실체

DB는 특별한 컴퓨터가 아닌 우리가 쓰는 프로그램과 같은 것 즉 자신의 컴퓨터에 DB도 설치할 수 있음

요새는 Cloud형태로 DB를 제공해주는 곳들이 많음

유저가 몰리거나 DB를 백업하거나 모니터링하기가 아주 용이하기 때문(트렌드는 클라우드)

 

[ mongoDB 시작하기 ]

▶ mongoDB - Atlas 가입한 후 접속준비하기

mongoDB사이트: https://account.mongodb.com/account/register

 

Cloud: MongoDB Cloud

 

account.mongodb.com

  1. 회원가입하기
  2. DB만들기 버튼 클릭
  3. M0 - AWS - Seoul으로 선택한후 Create 버튼 클릭
  4. 조금 기다린후 Username, Password 입력후 Create User클릭
  5. IP Address입력후 Add Entry 클릭
  6. Finish and Close버튼 클릭 후 Go to Databases하면 완료

▶ mongoDB - Atlas 연결

내 컴퓨터에서 데이터를 mongoDB에다가 보내고 가져올것임

즉 내 컴퓨터에서 mongoDB를 조작하는 것

mongoDB라는 프로그램을 조작하려면 pymongo와 dnspython이라는 두개의 라이브러리가 필요함

 

터미널을 열고

pip install pymongo dnspython

입력후 다운

 

pymongo 기본코드

from pymongo import MongoClient
client = MongoClient('몽고DB주소')
db = client.dbsparta

 

몽고DB주소는 몽고사이트에서 

  1. connect
  2. connect your application
  3. DRIVER - Python, VERSION - 3.6 or later
  4. Add your ~ code 밑에 코드를 복사하면 그것이 나의 몽고DB주소
  5. 링크를 붙여넣을때는 password 부분을 자신의 password로 변경해야함

▶ pymongo로 DB조작하기

데이터 넣기

# 'users'라는 collection에 {'name':'bobby','age':21}를 넣음

db.users.insert_one({'name':'영수','age':24})
db.users.insert_one({'name':'철수','age':20})

 

모든 결과 값 보기

# 모든 데이터 뽑아보기
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':19}})

user = db.users.find_one({'name':'영수'})
print(user)	# {'name': '영수', 'age': 19}

 

삭제하기

db.users.delete_one({'name':'영수'})

user = db.users.find_one({'name':'영수'})
print(user) # None
더보기

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

 

'항해99' 카테고리의 다른 글

JavaScript 문법 뽀개기  (0) 2023.04.18
웹개발 종합반_5주차  (1) 2023.04.16
웹개발 종합반_4주차  (0) 2023.04.10
웹개발 종합반_2주차  (0) 2023.04.03
웹개발 종합반_1주차  (4) 2023.04.01

댓글