Programming/Python 웹 스크래퍼 만들기

Python Flask 가짜 DB 만들어서 웹사이트 속도 향상 시키기

Security Engineer 2023. 1. 9. 21:00

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 ) 에 해당하는 구인정보가 그대로 뜬다.

속도가 향상되었다.

python 검색
python 검색 결과

react , nestjs 검색 시 처음에는 스크랩 ( extract ) 로 인해 속도가 다소 느리지만,

2번째 검색 or 새로고침 하면 즉시 기존에 스크랩 ( extract ) 했던 내용이 나와 속도가 향상되었다.

react 검색 결과
nestjs 검색 결과

 

 

 

 

 

 


python 참고 강의

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