본문 바로가기

Python으로 웹 스크래퍼 만들기

Python으로 웹 스크래퍼 만들기 복습 12일차[DB, jinja2, Rendering, HTML에서 For문] (Feat. 노마드코더)

본 포스팅은 노마드코더님의 온라인 강의에 대한 복습을 기록하기 위한 포스팅입니다.

※ 본 포스팅의 내용은 강의를 들은 후 필자의 개인적인 의견을 기재한 것이니, 정답이 아닐 수 있음을 참고하십시오.

강의 소개 : 파이썬으로 웹 스크래퍼 만들기 (2주 완성반)
  -. 내용 : 파이썬 기초 (타입, 변수, 함수, 클래스 등 및 웹 스크래퍼 코드 작성법)
  -. 비용 : 100% 무료 강의
  -. 비고 : 한글 자막 제공 / 강의 100% 완료 시 10% 할인 쿠폰 제공
온라인 강의 : https://nomadcoders.co/
    /    풀스택 개발자 로드맵 : https://nomadcoders.co/roadmap
유튜브 채널 : https://www.youtube.com/channel/UCUpJs89fSBXNolQGOYKn0YQ
 

노마드 코더 Nomad Coders

한국인 린과 콜롬비아인 니꼴라스의 프로젝트 "노마드 코더" 입니다. 2015년 떠나, 현재까지 원하는 곳에서 일하며, 살고 있습니다. + + Nomad Academy: https://nomadcoders.co

www.youtube.com


 

#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로 존재 하는지 확인을 합니다.

Python으로 웹 스크래퍼 만들기 복습 12일차 1

    -. 만약 Key가 없다면 "get_jobs" Function을 통해 Scrapping을 실행한 후 db에 저장을 합니다.

Python으로 웹 스크래퍼 만들기 복습 12일차 2

    -. 하지만 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의 길이를 전달합니다.

Python으로 웹 스크래퍼 만들기 복습 12일차 3

    -. 위와 같이 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 %}를 입력해야 합니다.

Python으로 웹 스크래퍼 만들기 복습 12일차 4

    -. 최종적으로 Scrapping한 결과html에 출력 한 모습을 보실 수 있습니다.

 

※ 본 포스팅의 내용은 강의를 들은 후 필자의 개인적인 의견을 기재한 것으로,

   정답이 아닐 수 있음을 참고하십시오.

 


이상으로 Python으로 웹 스크래퍼 만들기 복습 12일 차를 마치겠습니다.

 

Python으로 웹 스크래퍼 만들기 복습 12일차 5