23.01.04 TIL (Day2)

신경연·2023년 1월 4일
0

TIL

목록 보기
2/9

Frontend

어제에 이어 프론트엔드 조금 더 다뤘다.

4. Ajax

API : Application Programming Interface

API의 맥락에서 애플리케이션이라는 단어는 고유한 기능을 가진 모든 소프트웨어를 나타냅니다.

API는 은행 창구와 같은 것!

  • GET → 통상적으로! 데이터 조회(Read)를 요청할 때
    예) 영화 목록 조회
  • POST → 통상적으로! 데이터 생성(Create), 변경(Update), 삭제(Delete) 요청 할 때
    예) 회원가입, 회원탈퇴, 비밀번호 수정

GET 방식으로 데이터를 전달하는 방법

예시) google.com/search?q=아이폰&sourceid=chrome&ie=UTF-8
? : 여기서부터 전달할 데이터가 작성된다는 의미입니다.
& : 전달할 데이터가 더 있다는 뜻입니다.

Ajax 코드

$.ajax({
    type: "GET",
    url: "주소값",
    data: {},
    success: function (response) {
        console.log(response)
    }
})

Backend

1. 파이썬

1) 패키지? 라이브러리?

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

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

파일 -> 설정 -> 프로젝트 : ?? -> python 인터프리터 -> + -> 설치
(여기서는 requests 썼음.)

2) 문법

또 자바와 다른 점 위주로 적어보았다.

#변수 선언 조차 안한다.

a = 2
b = 3
print(a+b)


# '문자열'과 리스트, 사전 자료형은 자바스크립트와 비슷하다.

a = 'KyungYeon'
b = 'Shin'
print(a+b)

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

a_dict = {
    'name' : 'bob',
    'age' : 27
}
print(a_dict['name'])


# 함수
# 들여쓰기만 조심하면 된다.
def sum(a, b) :
    print('더하자!')
    return a+b

result = sum(1,2)
print(result)


# for문, if문

people = [{'name': 'bob', 'age': 20},
{'name': 'carry', 'age': 38},
{'name': 'john', 'age': 7},
{'name': 'smith', 'age': 17},
{'name': 'ben', 'age': 27}]

for person in people:
    if person['age'] > 20:
        print(person['name'])

2. 크롤링

BeautifulSoup
패키지 bs4 설치.
크롤링에 필요한 코드다.

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('주소',headers=headers)

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

영화 제목을 갖고 온다 하면
영화 제목 우클릭 > 검사 > 그 부분의 코드가 뜸. > copy > copy selector

#old_content > table > tbody > tr:nth-child(3) > td.title > div > a
#old_content > table > tbody > tr:nth-child(4) > td.title > div > a

위와 같은 코드가 카피 된다.
앞 부분이 다 같은 것을 확인.

#tr에 저장된 데이터를 전부 가져옴.

movies = soup.select('#old_content > table > tbody > tr')
print(movies)
for movie in movies:
    a = movie.select_one('td.title > div > a')      #tr에 저장된 데이터 중 title 부분만 가져오기.
    if a is not None:								#가끔 이상한 데이터가 있는데 None 이라고 뜨게 된다. 이를 걸러냄.
        title = a.text
        rank = movie.select_one('td:nth-child(1) > img')['alt']
        star = movie.select_one('td.point').text
        print(title, rank, star)

3. DB

1) DB 종류

이 중에 No-SQL에 해당하는 MongoDB를 사용하였다.

RDBMS(SQL)

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

No-SQL

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

2) DB 환경 설정

패키지 설치 : pymongo, dnspython

url 위치
mongoDB Atlas 화면 > Cluster0 옆의 Connect > Connect your application > Python 3.6 or later > url 복사

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

#url 변경이 필요함.
#mongodb+srv://<아이디>:<비밀번호>@cluster0.8vasl6v.mongodb.net/<클러스터0>?retryWrites=true&w=majority
#결과물
mongodb+srv://test:sparta@cluster0.8vasl6v.mongodb.net/Cluster0?retryWrites=true&w=majority

3) DB 집어 넣기

doc = {
    'name': 'bob',
    'age': 27
}

#users가 db 폴더명
db.users.insert_one(doc)

4) 저장된 DB 보는법

mongoDB Atlas 화면 > browse collections 에서 직접 볼 수도 있고, 수정도 가능하다.

자주 끌어 쓸 코드

크롤링

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('주소',headers=headers)

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

movies = soup.select('#old_content > table > tbody > tr')
print(movies)
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(title, rank, star)

DB

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

# 저장 - 예시
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'})
profile
반갑습니다

0개의 댓글