항해99 | 웹개발 종합반 3주차

docu·2023년 2월 5일
0

항해99

목록 보기
3/15

3-4 파이썬 기초공부

a_list = ['사과','배','참외']
a_list.append('수박')
print(a_list)
#['사과','배','참외','수박']

❓array를 list, object를 dictionary 차이

# 수학문제에서
f(x) = 2*x+3
y = f(2)
y의 값은? 7

# 참고: 자바스크립트에서는
function f(x) {
	return 2*x+3
}

# 파이썬에서
def f(x):
	return 2*x+3

y = f(2)
y의 값은? 7

python 함수

def is_adult(age):
	if age > 20:
		print('성인입니다')    # 조건이 참이면 성인입니다를 출력
	else:
		print('청소년이에요')  # 조건이 거짓이면 청소년이에요를 출력

is_adult(30)

python 조건문

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

for fruit in fruits:
	print(fruit)

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

파이썬에서의 반복문은, 리스트의 요소들을 하나씩 꺼내쓰는 형태
애초에 어레이와 함께 쓰도록 기획이 되어있다

3-5 파이썬 패키지 설치

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

모듈<패키지<라이브러리

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

requests 패키지 설치
일종의 ajax 처럼 역할

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

r = requests.get('url')
rjson = r.json()

request 라이브러리는 이렇게 씀
라이브러리마다 쓰는 방식이 다르므로 검색해보면 나옴

3-7 웹스크래핑(크롤링) 기초

크롤링을 하려면
1. url로 요청해서 html 가져오는 것 (requests로 가져옴)
2. 그 안에서 제목 가져오는것 (쉽게 찾게 해주는 라이브러리 = beautifulsoup "bs4")

import requests
from bs4 import BeautifulSoup

# 타겟 URL을 읽어서 HTML를 받아오고,
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://movie.naver.com/movie/sdb/rank/rmovie.naver?sel=pnt&date=20210829',headers=headers)

# HTML을 BeautifulSoup이라는 라이브러리를 활용해 검색하기 용이한 상태로 만듦
# soup이라는 변수에 "파싱 용이해진 html"이 담긴 상태가 됨
# 이제 코딩을 통해 필요한 부분을 추출하면 된다.
soup = BeautifulSoup(data.text, 'html.parser')

#############################
# (입맛에 맞게 코딩)
#############################

크롤링 기본 세팅 -> 여기서 soup print하면 html이 쭉 나옴
headers 부분은 우리가 코드에서 콜을 날리는데 마치 우리가 브라우저에서 콜을 날린것처럼, 사람인 것처럼 해주기 위해서 쓰는것

# 선택자를 사용하는 방법 (copy selector)
soup.select('태그명')
soup.select('.클래스명')
soup.select('#아이디명')

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

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

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

soup.select_one 하고 안에 복사한거 붙여넣으면 태그가 쭈욱 나옴

태그 안의 텍스트를 찍고 싶을 땐 → 태그.text
태그 안의 속성을 찍고 싶을 땐 → 태그['속성']

title = soup.select_one('')
print(title.text)

하면 텍스트인 제목만 나옴

import requests
from bs4 import BeautifulSoup

# URL을 읽어서 HTML를 받아오고,
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://movie.naver.com/movie/sdb/rank/rmovie.naver?sel=pnt&date=20210829',headers=headers)

# HTML을 BeautifulSoup이라는 라이브러리를 활용해 검색하기 용이한 상태로 만듦
soup = BeautifulSoup(data.text, 'html.parser')

# select를 이용해서, tr들을 불러오기
movies = soup.select('#old_content > table > tbody > tr')

# movies (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
        print(rank, title, star)

여러개를 불러올때는 select
⭐️ 제목 순위 별점 따옴

3-9 DB 개괄

  • DB 왜쓰나?
    잘 저장하기 위해서가 아니라 정리를 잘해서 잘 뽑아쓰기 위해서
  • DB의 두가지 종류

    RDBMS(SQL)
    행/열의 생김새가 정해진 엑셀에 데이터를 저장하는 것과 유사합니다. 데이터 50만 개가 적재된 상태에서, 갑자기 중간에 열을 하나 더하기는 어려울 것입니다. 그러나, 정형화되어 있는 만큼, 데이터의 일관성이나 / 분석에 용이할 수 있습니다.
    ex) MS-SQL, My-SQL 등

장점 : 정형화 되어있기에 이상한 데이터가 들어올리 없음. 찾을때도 빨리 찾을 수 있다
단점 : 예를들어 스타트업 같은 곳에서는 비지니스가 발전하고 바뀜. 그럴때 대처하기 어려움. 이름 전화번호만 받다가 이메일도 받자~ 하기 어려움

No-SQL
(not only sql) 딕셔너리 형태로 데이터를 저장해두는 DB입니다. 고로 데이터 하나 하나 마다 같은 값들을 가질 필요가 없게 됩니다. 자유로운 형태의 데이터 적재에 유리한 대신, 일관성이 부족할 수 있습니다.
ex) MongoDB

장점: 그때그때마다 데이터가 쌓이기 때문에 유연하게 대처할 수 있다. 초기 서비스나 초기 스타트업에서 많이 사용함

  • DB의 실체
    DB는 특별한 컴퓨터가 아니라 프로그램 같은 것. 포토샵, 파워포인트같은 프로그램. 데이터를 잘 쌓고 데이터를 잘 가져오게 하는 프로그램. 내 컴퓨터에도 DB깔수 있음.
    수업에서는 클라우드 환경에서 제공해주는 DB를 사용할 것임.
    장점: 유저가 몰리거나 / DB를 백업해야 하거나 / 모니터링 하기가 아주 용이

3-11 mongoDB 연결하기

엑셀을 파이썬으로 조작하려면 라이브러리가 필요하듯이
mongoDB를 조작하려면 라이브러리 pymongo가 필요함
-> pymongo와 dnspython 설치

from pymongo import MongoClient
import certifi

ca = certifi.where()
client = MongoClient('여기에 URL 입력', tlsCAFile=ca)
db = client.dbsparta
pymongo.errors.ServerSelectionTimeoutError: ~ [SSL: CERTIFICATE_VERIFY_FAILED]~

에러메시지가 떠서 faq 참고
certifi 패키지 설치 후 임포트했다니 됨

# 저장 - 예시
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}))
print(all_users[0])         # 0번째 결과값을 보기
print(all_users[0]['name']) # 0번째 결과값의 'name'을 보기

for user in all_users:      # 반복문을 돌며 모든 결과값을 보기
    print(user)

# 바꾸기 - 예시
db.users.update_one({'name':'bobby'},{'$set':{'age':19}})

# 지우기 - 예시
db.users.delete_one({'name':'bobby'})

넣어주기: insert_one
찾기: find_one / find
바꾸기: update_one
지우기: delete_one

all_movies = list(db.movies2.find({'star':star},{'_id':False}))

for a in all_movies:      # 반복문을 돌며 모든 결과값을 보기
    print(a['title'])

여러개 갖고 오는게 조금 어려웠는데
find 안에 조건 넣는거

1,2주차에는 눈에 보이는거
3주차에는 서버를 만들수 프로그래밍 언어 파이썬
4,5주차는 둘을 만나게함

musics = soup.select('#body-content > div.newest-list > div > table > tbody > tr')

for music in musics:
    rank = music.select_one('td.number').text[0:2].strip()
    title = music.select_one('td.info > a.title.ellipsis').text.strip()
    artist = music.select_one('a.artist.ellipsis').text
    print(rank)

과제에서 어려웠던 부분은 [0:2] js의 .slice(0,2)와 유사. 헷갈려어
문자열의 첫문자의 인덱스, 추출하고자 하는 마지막 문자열 index에서 하나 더한값
파이썬 내장함수 strip()은 빈공간을 삭제

파이썬 슬라이스 참고

0개의 댓글