[왕초보] 비개발자를 위한, 웹개발 종합반 3주차

Thomas·2023년 3월 30일
0

자바스크립트 복습

$(document).ready(function () {
	// code
})

자동으로 로딩해주는 코드

영화 포스트 api로 데이터 받아오기

fetch("http://spartacodingclub.shop/web/api/movie").then(res => res.json()).then(data => {
                let rows = data['movies']
                rows.forEach((a)=>{
                	let desc = a['desc']
                	let comment = a['comment']
					let star = a['star']
                    let image = a['image']
                    
                    let star_imamge = '⭐'.repeat(star)
                    
                     let temp_html = `<div class="col">
                                            <div class="card h-100">
                                                <img src="${image}"
                                                     class="card-img-top">
                                                <div class="card-body">
                                                    <h5 class="card-title">${title}</h5>
                                                    <p class="card-text">${desc}</p>
                                                    <p>${star_image}</p>
                                                    <p class="mycomment">${comment}</p>
                                                </div>
                                            </div>
                                        </div>`
                        $('#cards-box').append(temp_html)
                })
                
            })

파이썬

맥 터미널에서 특정 파이썬 실행하는 법

python "해당파일".py

프로젝트를 하다보면 모듈 설치를 하게 되는데 종종 모듈끼리 충돌 하는 경향이 있어 디렉토리 만들듯이 환경을 분리해서 프로젝트를 진행하는것이 고생을 덜 하게 된다...

파이썬은 일반적으로 pip를 이용하여 모듈을 설치를 합니다. 이는 node.js의 npm과 유사하지만, 중요한 차이점이 있습니다.
npm은 자동으로 로컬 환경에 모듈을 설치하지만, pip는 글로벌 환경에 설치한다는 점입니다. 이 때문에, 별도로 가상환경이라는 개념을 적용하게 된 것입니다

venv 가상환경

가상환경 만들 디렉토리로 가서 명령어를 통해 env 라는 가상환경 설치 (Mac에선 python3 붙여주자)

python3 -m venv venv(가상환경 이름)

특정 가상환경 활성화 하기

source venv/bin/activate

비활성화

deactivate

쉽게 설명해서 venv 가상환경에 접속을 하게 된 상황에선 라이브러리를 venv 폴더(가상환경)에 깐다고 생각하면 이해하기 쉽습니다.

request 라이브러리 설치

pip install requests

2주차에 배웠던 JS의 Fetch 역할이랑 동일하다.
한마디로 request는 서버에서 데이터를 가져와서 볼수 있다.

미세먼지 API 데이터 프린트하기

import requests

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

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

for a in rows:
    gu_name = a['MSRSTE_NM']
    gu_mise = a['IDEX_MVL']
    print(gu_name,gu_mise)

결과

웹 크롤링 맛보기

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('https://movie.naver.com/movie/sdb/rank/rmovie.naver?sel=pnt&date=20210829',headers=headers)

soup = BeautifulSoup(data.text, 'html.parser')

a = soup.select_one('#old_content > table > tbody > tr:nth-child(3) > td.title > div > a')

print(a.text) -> 그린북
print(a['href']) -> /movie/bi/mi/basic.naver?code=171539

select_one 안에 들어갈 특정 데이터 가져오는 법

a = soup.select_one('#old_content > table > tbody > tr:nth-child(3) > td.title > div > a')

크롬에 가서 원하는 데이터 오른쪽 클릭후 검사 -> Copy -> Copy selector

네이버 영화랭킹 크롤링하기

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('https://movie.naver.com/movie/sdb/rank/rmovie.naver?sel=pnt&date=20210829',headers=headers)

soup = BeautifulSoup(data.text, 'html.parser')

trs = soup.select('#old_content > table > tbody > tr')
cnt = 0
for tr in trs:
    a = tr.select_one('td.title > div > a')
    if a is not None:
        title = a.text
        point = tr.select_one('td.point').text
        rank = tr.select_one('img')['alt'] 
        print(rank,title,point)

DB개괄

DB 쓰는 이유

나중에 잘 찾기 위해서

DB 종류

RDBMS(SQL)

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

장점: 틀이 이미 다 정해져 있기 떄문에 사람이 실수할 일이 적다
그래서 주로 대기업같은 큰 비즈니스가 잘 안 바뀌는 곳에서 사용

No-SQL(Not only SQL)

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

장점: 비즈니스의 유연성을 굉장히 크게 담보합니다.(스타트업)

요즘은 로컬DB보단 클라우드 환경에 올려 놓는다.

유저가 몰리거나 / DB를 백업해야 하거나 / 모니터링 하기가 용이하기 때문.

터미널에서 패키지 설치

pip install dnspython
pip install pymongo

pymongo 라이브러리 사용법

Pymongo 기본 세팅

from pymongo import MongoClient
client = MongoClient('mongodb+srv://sparta:test@cluster0.ysqkjuw.mongodb.net/?retryWrites=true&w=majority')
db = client.dbsparta

MongoDB에 데이터 삽입

doc = {
    'name': 'Thomas',
    'age': 31
}

db.users.insert_one(doc)

MongoClient('여기 나오는 코드는 Mongo DB 홈페이지에서 프로젝트 생성후 발급 받는 법은 인터넷 참고!!')

코드 작성후 python3 dbprac.p 실행 했는데 에러가 나온다...

"raise OperationFailure(errmsg, code, response, max_wire_version)
pymongo.errors.OperationFailure: bad auth : authentication failed, full error: {'ok': 0, 'errmsg': 'bad auth : authentication failed', 'code': 8000, 'codeName': 'AtlasError'}"

authentication 이라는 말에 비번을 잘못 쳤구나 했는데
<password> -> test 라고 쳐야할거 <test>라고 쳐서 안 된줄 알고 고쳐도 안된다... 오랜 삽질 끝에 그냥 다시 새로 만들고 하니깐 성공...

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

위에 코드를 사용하기 전에 'Pymongo 기본 세팅'작성 후 MongoDB 데이터를 조회,저장,수정,삭제를 할수 있다.

웹스크래핑 결과 이용하기

find, update 연습하기

  • 영화제목 '가버나움'의 평점 가져오기
movie = db.movies.find_one({'title' : "가버나움"},{'_id': False})

print(movie['point'])
  • '가버나움'의 평점과 같은 평점의 영화 제목들을 가져오기
movie = db.movies.find_one({'title' : "가버나움"},{'_id': False})

target = movie['point']

all_movie = list(db.movies.find({'point' : target},{'_id':False}))

for a in all_movie:
    print(a['title'])
  • '가버나움'영화의 평점을 0으로 만들기
db.movies.update_one({'title':'가버나움'},{'$set':{'point':0}}) // 평점을 0으로 만들기

movie = db.movies.find_one({'title':'가버나움'},{'_id': False}) // DB에 가서 보기 귀찮으니 그냥 조회해줌

print(movie)
profile
Backend Programmer

0개의 댓글