Programming/Python 웹 스크래퍼 만들기

Python Flask 간단 정리

2022. 12. 30. 21:00

6.4 Recap

 

지금까지 했던 Flask 를 이용해서 웹 페이지를 연결했던 작업을 간단히 정리해본다.

 

Flask 를 설치하였고, Flask 를 import 했다. ( Flask 설치는 cmd 창을 열고 pip install flask 입력하면 설치완료 )

Job Scrapper 라고 불리는 새로운 Flask application인 app 변수를 만들었다.

이 app 변수는 유용하게 쓸 수 있다.

 

< main.py >

from flask import Flask, render_template

app = Flask("JobScrapper")

app.run("0.0.0.0")

시작 부분에서 app.run() 함수를 호출하면 Flask application 을 그냥 만들어준다.

 

( ) 안에 0.0.0.0 이나 127.0.0.1 등 의 특정 IP 를 입력하면

웹 서버를 연결시켜 브라우저에 (크롬, 파이어폭스 엣지 등) 해당 IP 를 입력하게 되면 접속이 된다.

( 아직 제대로 response 데이터를 입력한게 없으니 Not Found 가 화면에 뜬다. )

 

그리고 사용자가 웹 페이지를 방문했을 때 응답하는 코드도 작성해보았다.

( 사용자의 request 와 그에 상응하는 response )

 

< main.py >

from flask import Flask, render_template

app = Flask("JobScrapper")

@app.route("/")
def home():
    return "hi"

app.run("0.0.0.0")

콘솔창:

 

@app.route ( ) 를 사용하여 응답할 페이지를 지정해주기만 하면 된다.

( @app.route 는 decorator 라고 한다. )

@app.route ( "/" ) 괄호 안의 내용 →  /  를 url 에 입력 시 아래 함수로 응답하겠다는 의미이다.

( / 는 사실 아무것도 입력하지 않아도 연결된다, url directory를 구분해주는 slash 일뿐이다. )

@app.route ( "/" )  같은 decorator 를 쓰고 바로 아래 함수를 만들어서 응답한다.

( @app.route( "/" ) → URL 에 127.0.0.1:5000 입력 시 hi 를  return 하겠다. )

( 숫자, 문자열 등등 return 할수 있다. )

 

127.0.0.1:5000 접속 시 hi 가 return 됨

위와 같이 hi 라는 문자열을 return 할수 있지만,  많은 HTML 을 보내고 싶은 경우 위와 같은 방법은 한계가 있다.

좀 더 복잡한 문자열이나 UI 를 만들고 싶으면 이를 위해 render_template 이라는 함수를 import 했다.

( 더 많은 HTML, CSS 를 사용한 UI )

render_template은 Flask 가  templates 폴더를 들여다 보게 한다.

그리고 내가 정한 이름의 template을 찾아준다.

templates 폴더 생성
main.py 와 같은 위치 생성

vs code 에서 새로운 폴더를 만들고 templates 라고 이름을 짓는다.

Flask 가 templates 라는 이름의 폴더를 찾아보기 때문에 소문자 그대로 폴더이름을 짓는다.

또한 폴더 위치도 main.py 와 같은 선상에 있어야한다. ( 다른 폴더 안에 있거나 하면 안된다. )

templates 폴더 안에 home.html 이라는 새로운 파일을 만든다.

 

< main.py >

from flask import Flask, render_template

app = Flask("JobScrapper")

@app.route("/")
def home():
    return render_template("home.html", name="james", age=20)

app.run("0.0.0.0")

위 코드에서는 Flask 에게 home.html 이라는 template 을 render 요청을 하고있다.

rendering 은 단순히 사용자에게 HTML 을 전달할 뿐만 아니라 HTML 에 변수도 전달할 수 있다.

( name 과 age 라는 변수 전달 ) -  {{ }} 중괄호를 사용해서 변수 작동

그리고 사용자가 응답을 받기 전에 Flask 가 하는 일은 HTML 안의 변수를 실제 data 로 바꿔준다.

( 웹 페이지에 접속하면 Flask 가 변수 값을 그 자리에 넣어주는것을 확인할 수 있다. )

 

< home.html >

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Job Scrapper</title>
</head>
<body>
    <h1>Hello to you! My name is {{name}}, I'm {{age}} years old</h1>
</body>
</html>

위 main.py 와 home.html 코드는 서로 연결되어 main.py 코드 실행 시

크롬창 새로 열고 주소창에 127.0.0.1:5000 입력 후 접속하면 아래처럼 페이지가 뜬다.

따라서 rendering은 사용자에게 HTML 을 전달하는 것 뿐만 아니라, 실제로 HTML 파일에 데이터를 보낸다.

그러면 Flask 는 변수를 data로 변경하고 사용자가 보는 진짜 HTML 을 만든다.

그래서 render_template 을 사용한다. ( 단순 문자열 뿐만 아니라, HTML 파일에 데이터를 보내기 때문 )

 

 

home.html 에 간단한 form 을 만들어보았다.

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Job Scrapper</title>
</head>
<body>
    <h1>Job Scrapper</h1>
    <h4>What job do you want?</h4>
    <form action="/search">
        <input type="text" name="keyword" placeholder="Write keyword please" />
        <button>Search</button>
    </form>
</body>
</html>

웹 페이지 출력값:

action은 form 이 어디로 가는지를 알려준다.

→ <form action="/search"> 코드 추가 ➤ form 입력 시 /search 로 이동.

<input type="text" name="keyword" placeholder="Write keyword please" />

→ input 타입은 text, name 은 keyword, placeholder (안내문구) 는 Write keyword please 로 정의

 

form 에는 1개의 input 과 1개의 button 이 있다.

input 의 name 을 keyword 로 설정하고,

브라우저에게 form 이 submit 될 때,

즉 사용자가 enter 나 search 버튼을 누를 때 /search 페이지로 이동하게 했다.

이게 의미하는거는 /search 페이지로 가서 URL 에 있는 input 값들에 접근할 수 있다는 것이다.

왜냐하면 GET method 를 사용하기 있기 때문이다.

 <form action="/search"> 와 <form action="/search" method="get"> 은 서로 동일하다.

모든 form 은 기본으로 GET method 가 설정되어 있다.

GET method 는 사용자가 action 으로 넣은 page 로 이동하게 되면

사용자가 input 에 입력했던 모든 value 를 URL 에 보여준다.

GET 메서드를 통해 input value 값 확인

 

< search.html > - input 에 아무 값 입력하면 출력되는 HTML

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Job Scrapper</title>
</head>
<body>
    <h1>Search Results:</h1>
</body>
</html>

 

전체적인 흐름은 main.py 에서 Flask 를 import 하고 @app.route 를 사용해서

각 template 을 render 하여 웹 페이지 접속 시 사용자에게 보여준다.

home.html 에는 초기 검색화면을, search.html 에는 값 입력하면 검색 결과 화면을 보여준다.

폴더 및 파일은 아래와 같이 생성

 

 

코드는 아래와 같이 작성

 

< main.py >

from flask import Flask, render_template

app = Flask("JobScrapper")

@app.route("/")
def home():
    return render_template("home.html", name="james", age=20)

@app.route("/search")
def search():
    return render_template("search.html")

app.run("0.0.0.0")

 

< home.html >

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Job Scrapper</title>
</head>
<body>
    <h1>Job Scrapper</h1>
    <h4>What job do you want?</h4>
    <form action="/search">
        <input type="text" name="keyword" placeholder="Write keyword please" />
        <button>Search</button>
    </form>
</body>
</html>

 

< search.html >

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Job Scrapper</title>
</head>
<body>
    <h1>Search Results:</h1>
</body>
</html>

 

 

 

 


python 참고 강의

https://nomadcoders.co/python-for-beginners/lobby

'Programming > Python 웹 스크래퍼 만들기' 카테고리의 다른 글

Python Flask 로 HTML 에서 For 문 사용  (0) 2023.01.05
Python Flask Arguments  (0) 2023.01.02
Python Flask Form  (1) 2022.12.29
Python Flask Render Template  (0) 2022.12.28
Python Flask Introduction  (0) 2022.12.27
'Programming/Python 웹 스크래퍼 만들기' 카테고리의 다른 글
  • Python Flask 로 HTML 에서 For 문 사용
  • Python Flask Arguments
  • Python Flask Form
  • Python Flask Render Template
Security Engineer
Security Engineer
IT 공부
Security Engineer
IT-log
Security Engineer
전체
오늘
어제
  • 분류 전체보기 (178)
    • Programming (39)
      • Python 웹 스크래퍼 만들기 (39)
    • IT 지식 (70)
      • IT 정보 (28)
      • CS 기초 (24)
      • 운영체제 (8)
      • IT 인프라 기초 (10)
    • 보안 (46)
      • 악성코드 분석 (10)
      • Bandit 워게임 (25)
      • 취미로 해킹 2 (6)
      • 환경 구축 (4)
      • PoC 분석 (1)
    • 웹 해킹 (23)
      • 웹 기초 지식 (8)
      • SQL 기본 (2)
      • 웹 해킹 및 시큐어 코딩 기초 (13)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 웹 해킹
  • Python
  • IT 인프라
  • Def
  • 악성코드
  • WarGame
  • 악성코드 분석
  • bandit
  • CSS
  • CS 기초
  • webScrapper
  • 해킹
  • 파이썬
  • Web
  • 리눅스
  • Selenium
  • Beautifulsoup
  • 취미로 해킹
  • 운영체제
  • CS
  • flask
  • 컴퓨터
  • 시큐어 코딩
  • it 운영
  • 취미로해킹
  • 워게임
  • overthewire
  • HTML
  • 웹 개발
  • 모의해킹

최근 댓글

최근 글

hELLO · Designed By 정상우.
Security Engineer
Python Flask 간단 정리
상단으로

티스토리툴바

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.