6.0 Introduction
Flask 는 Python 을 이용해서 웹사이트를 구축할 수 있는 초소형 micro framework 이다.
micro framework 라고 불리는 이유는 크기가 매우 작고, 매우 사용하기 쉬워서이다.
웹사이트를 만들고, 사용자 입력을 처리하고, 파일을 전달하고, HTML 파일을 사용자 에게 보여주는 등
이런 작업들을 매우 적은 줄의 코드로 수행할 수 있다.
input 이 있는 form 을 갖는 웹사이트 코드를 위한 UI ( User Interface ) 를 만든다.
사용자가 'Python'을 입력하고, Enter 를 누르면 웹사이트에서 작업을 확인하게 만든다.
또는 사용자가 export 할 파일을 정하고 csv로 다운로드 할 수 있게 한다.
이전에 만들었던 webscrapper 코드를 사용한다. ( main.py )
Flask를 main.py 파일에 넣기위해,
파일을 생성하는 function을 따로 만들어 file.py 에 넣는다.
6.1 Hello Flask
file.py 안에 save_to_file 이라는 함수를 만든다.
file_name으로 file 을 하나 생성하고, file의 header를 쓰고
jobs의 각 jobs들에 대해서 동일한 작업을 하고 나서, file을 닫는다.
( 아래의 코드들을 file.py 에서 함수로 만들어서 진행한다는 의미이다. - main.py 의 일부코드 )
file = open(f'{keyword}.csv','w',encoding='utf-8-sig')
file.write('Postition,Company,Location,URL\n')
for job in jobs:
file.write(f"{job['position']},{job['company']},{job['location']},{job['link']}\n")
file.close()
위 코드를 복사해서 file.py 에 아래와 같이 붙여넣는다.
def save_to_file(file_name, jobs):
file = open(f'{file_name}.csv','w',encoding='utf-8-sig')
file.write('Postition,Company,Location,URL\n')
for job in jobs:
file.write(f"{job['position']},{job['company']},{job['location']},{job['link']}\n")
file.close()
main.py 코드들은 아래와 같이 수정해준다.
from extractors.indeed import extract_indeed_jobs
from extractors.wwr import extract_wwr_jobs
from file import save_to_file
keyword = input('What do you want to search for?')
indeed = extract_indeed_jobs(keyword)
wwr = extract_wwr_jobs(keyword)
jobs = indeed + wwr
save_to_file(keyword, jobs)
만약 main.py 코드 실행 시 아래와 같은 오류가 발생한다면
file.py 코드를 한번 실행 시켜준 후 다시 main.py 코드를 실행 시키면 해결된다.
( 아마 file.py 코드 내의 save_to_file 함수가 정의되지 않았다고 인식한거 같다. )
이전과 마찬가지로 python 입력시 채용공고 정보들을 스크랩 하여 pyhon.csv 파일로 저장된다.
파일을 저장하는 코드를 함수 save_to_file 로 옮겼다.
save_to_file 함수 = CSV 파일 이름이 될 file_name 과 job의 리스트가 될 jobs를 받는 함수이다.
main.py 를 실행해서 호출한다. ( save_to_file )
이제 main.py 에 있는 모든 코드를 삭제한다.
그리고 cmd ( 명령프롬프트 ) 창을 열고 pip install flask 를 입력해서 flask 를 설치한다.
이제 새로운 flask application 을 만든다.
main.py 에 아래 코드 작성
from flask import Flask
app = Flask("JobScrapper")
app.run("0.0.0.0")
app 라는 변수를 만들고, 그 app 를 초기화 한다.
이름은 아무거나 해도 상관없다. ( JobScrapper )
app.run 을 사용해서 이 application 을 실행한다.
( 웹 서버를 실행 )
코드를 실행하면 아래 화면 뜬다.
새로운 크롬창을 열고 127.0.0.1:5000 혹은 115.23.142.175:5000 에 접속해본다.
이전까지는 코드를 실행하면 python 스크립트를 실행한 결과를 vs code 콘솔창에서 보는게 전부였지만,
이제 웹 서버와 연결되어 브라우저 창에서 볼수 있다.
위 코드는 Flask application 을 간단히 만들어서 실행해본 코드이다.
브라우저에서 Not Found 가 발생하는 이유는 브라우저, 사용자가 웹사이트에 방문하려 하지만,
아직 위 코드에서는 방문자들을 처리해주는 어떤 코드도 없기 때문에
( 응답할 코드를 작성하지 않았기 때문에 )
GET 뒤에 " / " 가 있는데 여기에서 " / " 는 홈페이지를 의미한다.
브라우저는 GET 으로 홈페이지를 가져오려 했지만 코드에 아무것도 작성하지 않았기 때문에
Not Found 가 브라우저에 뜬다.
일반적으로 사용자가 브라우저로 웹사이트에 접속하면 브라우저에서 request 요청을 하기 때문에
웹 서버에서는 그에 관한 reply 를 해준다. ( 이미지, 동영상, 댓글 등등 )
위 코드에서는 아무것도 작성하지 않았기 때문에 Not Found 가 뜬다.
( Flask 는 위 3줄의 코드로 서버를 만들었고 사용자의 request 까지 받을 수 있게 만들었다. )
이제 사용자가 홈페이지로 접속하면 reply 해줄 코드를 작성한다. ( 사용자가 브라우저에서 보는 화면 )
from flask import Flask
app = Flask("JobScrapper")
@app.route("/")
def home():
return 'Welcome our website'
app.run("0.0.0.0")
사용자가 이 route로 이동하면 함수를 실행하도록 한다.
home , potato, apple 원하는 어떤 이름으로도 만들수 있다.
여기서 핵심은 @가 있는 코드를 함수의 바로 위에 위치시켜야한다.
( @app.route("/") → decorator 라고 한다. )
이건 sysntactic sugar 라고 하는데, 문법은 간단하지만, 여기서 일어나는 일은 사실 좀 더 복잡하다는 의미이다.
만약 decorator를 함수 ( def home(): ) 위에 두면 Flask는 사용자가 이 주소의 페이지를 방문했을 때
이 함수 ( def home(): ) 를 호출해야하는 것을 알게 된다.
하지만 이 decorator 가 이 함수를 decorating 하고 있을 때만 이렇게 동작한다.
만약 이렇게 다른코드가 있으면 동작하지 않는다.
decorator 와 함수는 항상 같이 있어야한다.
위 코드를 실행하고 크롬창에 127.0.0.1:5000 또는 115.23.142.175:5000 에 접속하면
내가 입력했던 home 함수의 return 값 ' Welcome our website ' 가 보인다.
Flask 는 내가 만든 함수에서 return 한 값을 웹 페이지로 보여준다.
python 참고 강의
'Programming > Python 웹 스크래퍼 만들기' 카테고리의 다른 글
Python Flask Form (0) | 2022.12.29 |
---|---|
Python Flask Render Template (0) | 2022.12.28 |
Python webscrapper 완성 (0) | 2022.12.08 |
Python webscrapper 파일 2개 합치기 (0) | 2022.12.07 |
Python selenium 활용해서 webscrapper 기초 제작 6 (0) | 2022.12.06 |