on
[노마드 코더]Python으로 웹 스크래퍼 만들기 #4.5~ 마무리
[노마드 코더]Python으로 웹 스크래퍼 만들기 #4.5~ 마무리
728x90
위에 만든 사이트는 하나의 직군에 대해 검색을 할때 시간이 오래걸리는 단점이 있다.
그래서 fake DB를 통해 검색속도를 더 높이려 한다.
from flask import Flask, render_template,request,redirect from scrapper import get_jobs app=Flask("SuperScapper") #앱 이름 db={} #DB는 라우트 외부에 나와있어야 함 ,report가 실행될때마다 초기화가 되면 안되니까 @app.route("/") def home(): return render_template("potato.html") @app.route("/report") def report(): word=request.args.get('word') if word: word=word.lower() #사용자의 잘못입력을 대비해 우리가 format 해주는 것 fromDb = db.get(word) if fromDb: jobs=fromDb else: jobs=get_jobs(word)#DB에 단어가 없다면 scrapper를 돌리면 된다. db[word]=jobs #scrapping을 마친 jobs를 DB에 넣어주면 됨 else: return redirect("/") #아무 단어도 없을 때는 None이기 때문에 다시 home으로 redirect 해준다 return render_template("report.html",searchingBy=word) app.run(host="0.0.0.0")
-db 라는 딕셔너리를 생성한다.-db에 word변수와 일치하는 값을 갖고 있는지 체크한다. 있다면 fromDb가 있는 if문이 실행될 것이고 없다면 fromDb가 None값을 가지게 되어 else문을 통해 스크래퍼를 돌리게 될 것이다.
이렇게 코드를 작성함으로써 DB에 이미 그 단어에 대해 검색한 적이 있다면, 다시 스크래퍼를 돌릴 시간이 필요 없어진다.
templates에 report.html에 코드를 더 짜보며 직업을 검색했을때 출력창을 꾸며보는 작업을 해보자.
Job Search section{ display: grid; gap:20px; grid-template-columns: repeat(4, 1fr); } Search Results Found {{resultsNumber}} result for: {{searchingBy}} Title Company Location Link {% for job in jobs %} {{job.title}} {{job.company}} {{job.location}} Apply {% endfor %}
위에
에는 그 직군을 검색했을때 몇개의 결과가 나오는지에 대해 알려주는 부분이다.
밑에 코드는 for ~ in을 통해 jobs에 담겨져 있는 결과물들을 차례차례 테이블에 넣어준다.
main.py
main.py 파일에 return 부분도 위에 html에 맞추어 반환하는 것들을 더 추가해줍니다.
그렇게 추가해준후 main.py를 실행하고 내가 만든 웹 사이트에 들어가서 react를 검색해 봤다.
<검색 결과를 CSV로 다운로드 받는 기능 추가>
CSV 파일로 다운받을 수 있게 하기 위해 main.py에 export함수를 추가해준다.
@app.route("/export") def export(): try: word=request.args.get('word') #word 이름의 argument를 request에서 뽑은것 if not word: raise Exception() #except 블록으로 가게 만들어줌 jobs=db.get(word) if not jobs: raise Exception() save_to_file(jobs) return send_file("jobs.csv") except: return redirect("/")
다운로드를 받을 수 있는 링크 또는 버튼을 report.html에 만들어 준다.
report.html에 추가
이제 CSV로 export하는 기능을 만들었다. exporter.py라는 파일을 만들고 이전 포스팅에 썼었던 save.py라는 파일의 내용을 옮겨주면 된다.
return은 비어놓는다.
CSV 링크 파일이 생긴 모습
링크를 누르게 되면 단어를 검색한 결과창을 엑셀파일로 다운로드 할 수 있다.
from http://hiyoonhyuck.tistory.com/42 by ccl(A) rewrite - 2021-04-06 15:26:21