본 포스팅은 노마드코더님의 온라인 강의에 대한 복습을 기록하기 위한 포스팅입니다.
※ 본 포스팅의 내용은 강의를 들은 후 필자의 개인적인 의견을 기재한 것이니, 정답이 아닐 수 있음을 참고하십시오.
강의 소개 : 파이썬으로 웹 스크래퍼 만들기 (2주 완성반)
-. 내용 : 파이썬 기초 (타입, 변수, 함수, 클래스 등 및 웹 스크래퍼 코드 작성법)
-. 비용 : 100% 무료 강의
-. 비고 : 한글 자막 제공 / 강의 100% 완료 시 10% 할인 쿠폰 제공
온라인 강의 : https://nomadcoders.co/ / 풀스택 개발자 로드맵 : https://nomadcoders.co/roadmap
유튜브 채널 : https://www.youtube.com/channel/UCUpJs89fSBXNolQGOYKn0YQ
#4.5 Faster Scrapper & #4.6 Rendering Jobs!
1) FakeDB를 이용하여 Scrapper 속도 높이기
-. 실제 DB를 연결 해주는 것이 아니라 딕셔너리 변수를 FakeDB로 활용하는 방법입니다.
""" main.py """
from flask import Flask, render_template, request, redirect
from scrapper import get_jobs
app = Flask("Flask")
db = {}
@app.route("/")
def home():
return render_template("home.html")
@app.route("/report")
def report():
word = request.args.get("word")
if word:
word = word.lower()
if word in db:
print("It is in DB")
jobs = db.get(word)
else:
print("It isn't in DB")
jobs = get_jobs(word)
db[word] = jobs
else:
return redirect("/")
return render_template(
"report.html",
searchingBy = word
)
app.run(host="0.0.0.0")
-. @app.route 밖에 db = {} 와 같이 딕셔너리 객체를 하나 생성합니다.
-. "get_jobs" Function을 실행하기 전에 db에 word 변수에 저장된 값이 Key로 존재 하는지 확인을 합니다.
-. 만약 Key가 없다면 "get_jobs" Function을 통해 Scrapping을 실행한 후 db에 저장을 합니다.
-. 하지만 Key가 있다면 db에 저장된 값을 jobs에 저장한 후 return을 합니다. (Scrapping 하지 않습니다.)
-. if word in db:
* db 라는 딕셔너리에 word라는 Key가 있다면
-. jobs = db.get(word)
* db 라는 딕셔너리에 word라는 Key를 가진 값을 jobs에 저장
-. else:
* db 라는 딕셔너리에 word라는 Key가 없거나 혹은 그 외의 상황이라면
-. db[word] = jobs
* jobs 값을 db 라는 딕셔너리에 word라는 Key로 저장
2) Scrapping 한 값을 html에 출력하기 -1
""" templates/report.html """
<!DOCTYPE html>
<html>
<head>
<title>Job Search</title>
</head>
<body>
<h1>Search Results</h1>
<h3>Found {{resultsNumber}} results for: {{searchingBy}}</h3>
</body>
</html>
""" main.py """
from flask import Flask, render_template, request, redirect
from scrapper import get_jobs
app = Flask("Flask")
db = {}
@app.route("/")
def home():
return render_template("home.html")
@app.route("/report")
def report():
word = request.args.get("word")
if word:
word = word.lower()
if word in db:
print("It is in DB")
jobs = db.get(word)
else:
print("It isn't in DB")
jobs = get_jobs(word)
db[word] = jobs
else:
return redirect("/")
return render_template(
"report.html",
searchingBy = word,
resultsNumber = len(jobs)
)
app.run(host="0.0.0.0")
-. resultsNumber = len(jobs) 를 이용하여 repot.html에 jobs의 길이를 전달합니다.
-. 위와 같이 resultsNumber로 받은 jobs의 길이(직업 개수)를 html에 출력합니다.
3) Scrapping 한 값을 html에 출력하기 -2
""" templates/report.html """
<!DOCTYPE html>
<html>
<head>
<title>Job Search</title>
<style>
section {
display:grid;
grid-template-columns: repeat(4, 1fr);
}
</style>
</head>
<body>
<h1>Search Results</h1>
<h3>Found {{resultsNumber}} results for: {{searchingBy}}</h3>
<section>
<h4>Title</h4>
<h4>Company</h4>
<h4>Location</h4>
<h4>Link</h4>
{% for job in jobs %}
<span>{{job.title}}</span>
<span>{{job.company}}</span>
<span>{{job.location}}</span>
<a href="{{job.link}}" target="_blank">Apply</a>
{% endfor %}
</section>
</body>
</html>
""" main.py """
from flask import Flask, render_template, request, redirect
from scrapper import get_jobs
app = Flask("Flask")
db = {}
@app.route("/")
def home():
return render_template("home.html")
@app.route("/report")
def report():
word = request.args.get("word")
if word:
word = word.lower()
if word in db:
print("It is in DB")
jobs = db.get(word)
else:
print("It isn't in DB")
jobs = get_jobs(word)
db[word] = jobs
else:
return redirect("/")
return render_template(
"report.html",
searchingBy = word,
jobs = jobs,
resultsNumber = len(jobs)
)
app.run(host="0.0.0.0")
-. flask의 render_template를 이용하여 report.html 에서 {% 코드 %} 와 같이 다양한 코드를 실행할 수 있습니다.
* {% for x in item %} ~~ {% endfor %}
** 반드시 마지막에 {% endfor %}를 입력해야 합니다.
* {% if x == "python" %} ~~ {% elif x == "vue" %} ~~ {% endif %}
** 마찬가지로 반드시 마지막에 {% endif %}를 입력해야 합니다.
-. 최종적으로 Scrapping한 결과를 html에 출력 한 모습을 보실 수 있습니다.
※ 본 포스팅의 내용은 강의를 들은 후 필자의 개인적인 의견을 기재한 것으로,
정답이 아닐 수 있음을 참고하십시오.
이상으로 Python으로 웹 스크래퍼 만들기 복습 12일 차를 마치겠습니다.