6.8 Cache
이전 게시물에서는 Flask 로 만든 웹 사이트를 Pico CSS 로 예쁘게 꾸몄었다.
하지만 매번 웹사이트에 재접속 하거나, 새로고침 할 때 마다
새로 구인정보를 스크랩 하기 때문에 웹 사이트 속도가 다소 시간이 걸렸다.
이번에는 웹 사이트 속도를 향상 시키기 위해 가짜 데이터 베이스를 만들어 본다.
main.py 코드의 home 이랑 search 함수 밖에 db 변수를 만든다.
왜냐하면 home 과 search 함수는 사용자가 웹 사이트를 방문할 때 마다 실행되기 때문이다.
사용자가 방문할 때 마다 keyword 변수는 URL 에 따라 새로 만들어진다.
[ 동작 원리 ]
예를 들어 어떤 사용자가 python 을 검색하면 생성된 jobs ( 구인정보 ) 를 가지고 와서 가짜 db 안에 저장한다.
다음에 사용자가 다시 방문했을 때 가짜 db 안에 python 값이 있다면, 실제로 python 을 extract 하지 않고
가짜 db 안에 있는, python 을 extract ( python을 검색했을 때 생성된 jobs ) 했던 값을 사용자에게 보여준다.
python 에 대한 요청이 첫번째로 오면, jobs 를 extract 한다.
그리고 그 jobs 를 key 를 python 으로 해서 db 에 저장한다. → db = {'python':[ ]} 이런 형식으로 저장된다.
db 에 저장된 jobs 를 사용자에게 전달.
다음 사용자가 와서 python 에 대한 요청을 또 하면, db 에 이미 python 을 가지고 있는지 확인한 다음에
다시 jobs 를 extract 하지 않고 db 에 저장되어 있던 jobs 를 바로 주면 된다.
if 와 else 를 사용해서 db 내의 keyword 검색 유무를 판단한다.
첫번째로 해야할 건 사용자가 검색한 keyword 가 db 에 있는지 확인한다.
if 를 사용해서 만약 keyword 가 db 안에 있다면, → if keyword in db:
jobs 는 db 안의 keyword 값과 같다고 한다. → jobs = db[keyword]
아니면 jobs 를 기존 방식처럼 indeed, wwr 에서 extract 한 값을 jobs 변수에 저장. → else:
jobs 변수는 리스트 형식이다. 기존의 indeed, wwr 에서 모두 리스트 형식으로 데이터를 extract 했으며,
또한 db 에 저장되는 값도 리스트 형식이다. ( 리스트로 저장된 값을 db 로 가져오기 때문이다. )
마지막으로 해야 할 것은 만약 keyword 가 db 에 없으면, jobs 를 extract 하고 그 값을 db 에 저장해야한다.
→ db[keyword] = jobs
< main.py >
from flask import Flask, render_template, request
from extractors.indeed import extract_indeed_jobs
from extractors.wwr import extract_wwr_jobs
app = Flask("JobScrapper")
db = {}
@app.route("/")
def home():
return render_template("home.html", name="james", age=20)
@app.route("/search")
def search():
keyword = request.args.get("keyword")
if keyword in db:
jobs = db[keyword]
else:
indeed = extract_indeed_jobs(keyword)
wwr = extract_wwr_jobs(keyword)
jobs = indeed + wwr
db[keyword] = jobs
return render_template("search.html", keyword=keyword, jobs=jobs )
app.run("127.0.0.1")
크롬창을 열고 127.0.0.1:5000 에 접속하여 python 을 검색한다.
처음 검색 시 구인정보를 스크랩 ( extract ) 하는데 시간이 걸리지만,
다시 새로고침을 하면 예전 처럼 다시 스크랩 ( extract ) 하는게 아니라
바로 이전에 스크랩 했던 검색값 ( keyword ) 에 해당하는 구인정보가 그대로 뜬다.
속도가 향상되었다.
react , nestjs 검색 시 처음에는 스크랩 ( extract ) 로 인해 속도가 다소 느리지만,
2번째 검색 or 새로고침 하면 즉시 기존에 스크랩 ( extract ) 했던 내용이 나와 속도가 향상되었다.
python 참고 강의
'Programming > Python 웹 스크래퍼 만들기' 카테고리의 다른 글
Python 웹 스크래퍼 & Flask 웹 사이트 구축 정리 (0) | 2023.01.11 |
---|---|
Python Flask 웹 사이트 다운로드 버튼 만들기 (0) | 2023.01.10 |
Flask 웹 사이트 Pico CSS 사용해서 꾸미기 (0) | 2023.01.06 |
Python Flask 로 HTML 에서 For 문 사용 (0) | 2023.01.05 |
Python Flask Arguments (0) | 2023.01.02 |