정리

3-TIL 정리 (Flask, API)-스파르타코딩클럽-

모_아이 2022. 4. 21. 00:27

●Flask

파이 몽고나 bs4, requests 처럼 똑같이 패키지를 설치 후 임포트!

Flask 프레임 워크 :  서버를 구동시켜주는 편한 코드 모음

from flask import Flask
app = Flask(__name__)

@app.route('/')
def home():
   return 'This is Home!'

if __name__ == '__main__':  
   app.run('0.0.0.0',port=5000,debug=True)

크롬에서 localhost:5000/ 으로 접속하면 내 컴퓨터로 돌리고 있는 서버가 나온다.

-종료

터미널 창을 클릭하고 ctrl + c를 누르자!

 

◎Flask 기초

Flask 서버를 만들 때는 항상 프로젝트 폴더 안에

static폴더 - 이미지, css파일을 넣어둔다

templates폴더 - html파일을 넣어둔다

app.py파일 이 3개를 만들고 시작하자

venv는 가상환경(보이지 않는다 생각하기, 패키지가 이곳에 설치 된다)

더보기

윈도우 기준 git을 이용해 venv 폴더 만들기

1. python -m venv .venv

.venv : 원하는 가상환경 이름

2. source .venv/Scripts/activate

가상환경 실행


이렇게 (.venv)라고 터미널에 뜨면 성공!

출처 : https://velog.io/@martinalee94/%EA%B0%80%EC%83%81%ED%99%98%EA%B2%BDvenv-%EB%A7%8C%EB%93%A4%EA%B8%B0

HTML파일을 templates 폴더에 넣어두고 불러올 수 잇는데

#flask 내장함수 render_template를 이용하자

from flask import Flask, render_template
app = Flask(__name__)

## URL 별로 함수명이 같거나,
## route('/') 등의 주소가 같으면 안됩니다.

@app.route('/')
def home():
   return render_template('index.html')

if __name__ == '__main__':
   app.run('0.0.0.0', port=5000, debug=True)

◎API (GET, POST 요청타입)

GET, POST 방식

여러 방식(링크)이 존재하지만 우리는 가장 많이 쓰이는 GET, POST 방식에 대해 다루겠습니다.

* GET

→ 통상적으로! 데이터 조회(Read)를 요청할 때

예) 영화 목록 조회

데이터 전달 : URL 뒤에 물음표를 붙여 key=value로 전달

→ 예: google.com?q=북극곰

* POST → 통상적으로! 데이터 생성(Create), 변경(Update), 삭제(Delete) 요청 할 때

예) 회원가입, 회원탈퇴, 비밀번호 수정

데이터 전달 : 바로 보이지 않는 HTML body에 key:value 형태로 전달

 

◎GET, POST 요청 클라이언트의 데이터를 받는 법

받은 값은 pirnt로 찍어볼 수 있다.

-GET 요청 API코드

@app.route('/test', methods=['GET'])
def test_get():
   title_receive = request.args.get('title_give')
   print(title_receive)
   return jsonify({'result':'success', 'msg': '이 요청은 GET!'})

- GET 요청 확인 Ajax코드

$.ajax({
    type: "GET",
    url: "/test?title_give=봄날은간다",
    data: {},
    success: function(response){
       console.log(response)
    }
  })

- POST 요청 API코드

@app.route('/test', methods=['POST'])
def test_post():
   title_receive = request.form['title_give']
   print(title_receive)
   return jsonify({'result':'success', 'msg': '이 요청은 POST!'})

- POST 요청 확인 Ajax코드

$.ajax({
    type: "POST",
    url: "/test",
    data: { title_give:'봄날은간다' },
    success: function(response){
       console.log(response)
    }
  })

-post 연습할시 하면 좋은 순서

필요한 API가 몇 가지 인지 생각 혹시 크롤링 해야할 값이 있다면 한번 먼저 시도 해보자.

1) 클라이언트와 서버 연결 확인하기

2) 서버부터 만들기

3) 클라이언트 만들기

4) 완성 확인하기(핑퐁)

-get 연습시

API 만들고 사용해보기 - 리스팅API ( Read > GET)

 

●meta태그 스크래핑

우리가 카톡이나 기사 URL만 입력했는데 썸네일과 간단 요약 같은 자동으로 먼저 불러와지는 부분들이 있다.

예) 영화 관련 url을 카톡으로 전송시 썸네일, 제목, 줄거리, 평점 등을 자동으로 보여준다.

이 부분들을 우리가 'meta'태그를 크롤링 함으로써 공통적으로 얻을 수 있다.

  • (링크)에 접속한 뒤 크롬 개발자 도구를 이용해 HTML의 생김새를 살펴볼까요?
  • 메타 태그는, <head></head> 부분에 들어가는, 눈으로 보이는 것(body) 외에 사이트의 속성을 설명해주는 태그들입니다.
  • 예) 구글 검색 시 표시 될 설명문, 사이트 제목, 카톡 공유 시 표시 될 이미지 등
  • 우리는 그 중 og:image / og:title / og:description 을 크롤링 할 예정입니다.

-크롤링 기본 코드

import requests
from bs4 import BeautifulSoup

url = 'https://movie.naver.com/movie/bi/mi/basic.nhn?code=171539' # 네이버 영화 소개

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

# 여기에 코딩을 해서 meta tag를 먼저 가져와보겠습니다.

-select_one 사용

og_image = soup.select_one('meta[property="og:image"]') # 특정 태그만 불러오기
og_title = soup.select_one('meta[property="og:title"]')
og_description = soup.select_one('meta[property="og:description"]')

url_image = og_image['content']
url_title = og_title['content']
url_description = og_description['content']

print(url_image)
print(url_title)
print(url_description)

# 영화 포스터 , 영화 제목 , 간단줄거리

 

반응형