Security Engineer 2023. 1. 2. 21:00

6.5 Arguments

 

이전 게시물에서는 Python Flask 의 Route를 이용하여 웹 페이지를 연결했던 작업을 간단히 정리했었다.

이제 URL 에 있는 keyword 값을 search function ( 함수 ) 안에서 사용해본다.

search function 안에서 사용하기 위해 request 를 import 한다. ( main.py 에서 import )

requestrequest(콘텐츠 요청) 에 대한 정보에 접근 할 수 있게 해준다.

request → 브라우저가 웹 사이트에 가서 콘텐츠를 요청하는 것을 의미한다.

request 에는 많은 정보가 있다. ( 요청하는 URL, IP주소, Cookies 유무 등등 )

위 사진의 URL 에서 보듯이 내가 필요한거는 ? 뒤에 keyword 부분이다.

 

< main.py > - args 는 argument(인자) 이다.

from flask import Flask, render_template, request

app = Flask("JobScrapper")

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

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

app.run("0.0.0.0")

코드 실행 후 VS Code 콘솔창

main.py 코드를 작성하고 실행하여 다시 127.0.0.1:5000 (211.195.117.212:5000 )에 접속해서 python 검색.

URL 은 기존과 변함이 없지만 VS Code 콘솔창은 keyword 와 python 을 나타낸다.

request 사용 이후 웹 페이지 접속 후 VS Code 콘솔 창

이를 통해 request 의 args 에서 keyword 를 가져오면 된다는 것을 알 수 있다.

다시 main.py 코드를 아래와 같이 수정한다.

 

< main.py > - request (요청해서 가져온) argument "keyword"를 keyword 라는 변수에 저장.

from flask import Flask, render_template, request

app = Flask("JobScrapper")

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

@app.route("/search")
def search():
    keyword = request.args.get("keyword")
    return render_template("search.html", keyword = keyword )

app.run("0.0.0.0")

keyword = request.args.get("keyword")

→ 이제 keyword 라는 변수안에 request 해서 가져온 argument 인 "keyword" 를 저장했고, 

keyword를 template 에 보낼 수 있다.

따라서 사용자가 무엇을 검색하는지 알려줄 수 있다.

search. html 코드로 가서 코드를 수정해본다.

 

< search.html > - Search Results for "{{keyword}}" 추가 후 코드 저장

<!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 for "{{keyword}}":</h1>
</body>
</html>

변수 사용시 - {{ }} 중괄호 2개 적고 안에 변수 이름(keyword) 넣는다

 

지금까지 흐름은 request 를 import 해서 request 사용 시 얻게되는 정보 keyword 를,

사용자가 keyword (python, react, java 등등) 를 검색하면 웹 페이지의 화면에 보이도록

main.py 와 search.html 에 keyword 변수를 추가해준다.

( 사용자가 검색했던 검색 단어를 웹 페이지 화면에 출력되도록 코드를 변경 )

python 검색 시 python ( keyword ) 가 화면에 보여짐

request 의 args 에서 keyword를 가져와서

( URL 의 ? 뒤에 있는 arguments 에서 keyword를 가져와서 )

그 keyword를 search.html 에 보내고 있고, search.html 은 UI 에 그 keyword를 사용하고 있다.

Flask 는 이 {{변수이름}} 를 실제 변수의 값으로 대체 → {{keyword}} 

= react 를 검색하면 react 가 화면에 출력된다.

react 검색 ( home.html )
react 검색 결과 ( search.html )

 

다음에 할거는 keyword를 사용해서 기존에 만들었던 wwr 과 indeed 의 extractors 를 호출하는것이다.

그리고 찾은 구인정보를 화면에 출력되게 한다. 

( 지금까지 했던 Flask 를 사용해서 웹 페이지를 연결하는 작업은 구인정보를 extractors 로 스크래핑 해서 Flask 를 사용해서 웹 페이지를 연결하여 , 웹 페이지에서도 구인정보를 확인할 수 있게 하는 것이다. )

 

< main.py > - wwr , indeed 웹 스크래퍼를 import 하고 jobs 변수에 스크랩 결과값을 저장.

from flask import Flask, render_template, request
from extractors.indeed import extract_indeedn_jobs
from extractors.wwr import extract_wwr_jobs

app = Flask("JobScrapper")

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

@app.route("/search")
def search():
    keyword = request.args.get("keyword")
    indeed = extract_indeedn_jobs(keyword)
    wwr = extract_wwr_jobs(keyword)
    jobs = indeed + wwr
    return render_template("search.html", keyword=keyword, jobs=jobs )

app.run("0.0.0.0")

[ 정리 ]

extractors 폴더의 indeed.py 와 wwr.py ( 웹 스크래퍼 코드 ) 를 import 해서

indeed 와 wwr 이라는 변수에 각각 검색값 ( keyword )의 결과인 구인정보를 저장하고,

jobs 라는 변수에 indeed 와 wwr 변수를 합친 결과 ( 구인정보 )를 저장하여

jobs를 template 으로 보내 Flask 가 이를 웹 페이지로 출력하게 만든다.

 

keyword 로 2개의 function 을 호출했으며, 2개의 리스트( indeed, wwr )를 1개의 리스트( jobs )로 합쳤다.

그리고 합친 리스트를 search.html 로 보낸다, Flask 가 웹 페이지로 연결.

 

 


python 참고 강의

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