[개인 프로젝트] 공모전 크롤링 (10) - 세부 페이지(검색 기능, 페이지네이션)

2024. 5. 11. 17:06·프로젝트 단위 공부/[개인 프로젝트] 공모전 크롤링

이전에 세부 페이지 html 파일을 작성하고, 메인 페이지에서 검색을 진행하면 해당 데이터를 받을 수 있도록 작성하였다. 이번에는 검색어가 포함된 제목을 가진 공모전을 찾아 페이지네이션 형태로 제공하도록 기능을 추가할 것이다.

 

[개인 프로젝트] 공모전 크롤링 (9) - 세부 페이지(검색, 더보기)

이전에  스크래핑한 데이터를 csv로 저장하는 작업과 임시로 표시해 뒀던 부분에 수집한 데이터를 바탕으로 실제 공모전의 제목과 날짜가 표시되도록 하였다. 이번에는 세부 페이지 html 파일을

sanseo.tistory.com

검색 기능 & 페이지네이션

검색 기능과 페이지네이션을 구현하면서 같은 부분을 수정하였기 때문에 함께 설명하려고 한다.

mainpage > views.py

페이지네이션 적용을 위한 라이브러리가 있어 활용하였다. 페이지 당 10개의 결과를 볼 수 있도록 설정하였고, 에러가 발생할 경우를 위한 try-except 구문을 추가해 주었다. 또한 searched_competitons 변수를 통해 사용자가 입력한 문자열이 포함된 title을 가진 object를 추출하여 context로 넘겨주었다. 참고로 icontains는 대소문자를 구분하지 않고 검색을 진행한다.

from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger

def search(request):
    keyword = request.GET.get('q')
    searched_competitions = Competition.objects.filter(title__icontains=keyword)

    paginator = Paginator(searched_competitions, 10)  # 페이지 당 10개의 결과를 보여줌
    page_number = request.GET.get('page')

    try:
        searched_competitions = paginator.page(page_number)
    except PageNotAnInteger:
        searched_competitions = paginator.page(1)
    except EmptyPage:
        searched_competitions = paginator.page(paginator.num_pages)
    
    context = {
        'keyword': keyword,
        'competitions': searched_competitions
    }
    return render(request, 'mainpage/search.html', context)

mainpage > templates > mainpage > search.html

<div id='competition-info'>
  <h5>"{{ keyword }}" - 검색 결과</h5>
  <div id='info'>
    <ul class='competition-list'>
      {% for competition in competitions %}
      <li align="center">
        <a href="{{ competition.url }}">
          <h5 class='title'>{{ competition.title }}</h5>
          <span class='application-start'>{{ competition.application_start|date:"Y-m-d" }}</span>
          <span> ~ </span>
          <span class='application-end'>{{ competition.application_end|date:"Y-m-d" }}</span>
          <br><span>{{ competition.platform }}</span>
        </a>
      </li>
      {% endfor %}
    </ul>
  </div>
</div>
{% if competitions.has_other_pages %}
<div align='center'>
  <div>
    {% if competitions.has_previous %}
    <a href="?q={{ keyword }}&page=1">&laquo; 처음</a>
    <a href="?q={{ keyword }}&page={{ competitions.previous_page_number }}">이전</a>
    {% endif %}

    <span>{{ competitions.number }} / {{ competitions.paginator.num_pages }}</span>

    {% if competitions.has_next %}
    <a href="?q={{ keyword }}&page={{ competitions.next_page_number }}">다음</a>
    <a href="?q={{ keyword }}&page={{ competitions.paginator.num_pages }}">마지막 &raquo;</a>
    {% endif %}
  </div>
</div>
{% endif %}

결과

결과 (1) - 검색어 "AI"
결과 (1) - 검색어 "AI"
결과 (2) - 검색어 " "

git push

git add .
git commit -m "feat: add pagenatition for detail page and done search function"
git push origin main

다음에는 공모전 데이터가 오류 없이 모두 스크래핑되는지 확인하고, 웹페이지 디자인을 마무리한다.

 

[개인 프로젝트] 공모전 크롤링 (11) - 데이터 스크래핑, 디자인 마무리

이전에 검색어가 포함된 제목을 가진 공모전을 찾아 페이지네이션 형태로 제공하도록 기능을 추가하였다. 이번에는 공모전 데이터가 오류 없이 모두 스크래핑되는지 확인하고, 웹페이지 디자

sanseo.tistory.com

 

'프로젝트 단위 공부 > [개인 프로젝트] 공모전 크롤링' 카테고리의 다른 글

[개인 프로젝트] 공모전 크롤링 (11) - 데이터 스크래핑, 디자인 마무리  (0) 2024.05.12
[개인 프로젝트] 공모전 크롤링 - 중간점검  (0) 2024.05.08
[개인 프로젝트] 공모전 크롤링 (9) - 세부 페이지(검색, 더보기)  (0) 2024.05.06
[개인 프로젝트] 공모전 크롤링 (8) - 메인 페이지(공모전 표시), 데이터 csv 저장  (2) 2024.05.03
[개인 프로젝트] 공모전 크롤링 (7) - 메인 페이지 (프론트)  (2) 2024.05.02
'프로젝트 단위 공부/[개인 프로젝트] 공모전 크롤링' 카테고리의 다른 글
  • [개인 프로젝트] 공모전 크롤링 (11) - 데이터 스크래핑, 디자인 마무리
  • [개인 프로젝트] 공모전 크롤링 - 중간점검
  • [개인 프로젝트] 공모전 크롤링 (9) - 세부 페이지(검색, 더보기)
  • [개인 프로젝트] 공모전 크롤링 (8) - 메인 페이지(공모전 표시), 데이터 csv 저장
기억에 남는 블로그 닉네임
기억에 남는 블로그 닉네임
  • 기억에 남는 블로그 닉네임
    얕게, 깊게
    기억에 남는 블로그 닉네임
  • 전체
    오늘
    어제
  • 블로그 메뉴

    • 홈
    • 방명록
    • 글쓰기
    • 분류 전체보기
      • Data Engineering
        • Airflow
        • 빅데이터
        • 자동화
        • 기타
      • Infra
        • AWS
        • Terraform
        • [인프라 구축기] Terraform 활용 AWS ..
      • CS
        • 자료구조
        • 알고리즘
        • 네트워크
        • 데이터베이스
        • 이것이 취업을 위한 코딩 테스트다 with 파이썬
      • Python
      • Web
      • Git
      • 기타
        • 취업 & 진로
        • 회고록
        • 기타
      • 프로젝트 단위 공부
        • [부스트코스] DataLit : 데이터 다루기
        • [개인 프로젝트] 공모전 크롤링
        • [개인 프로젝트] FC Online 공식 경기 분..
        • 프로젝트 개선 방안
      • [프로그래머스] 데이터 엔지니어링 데브코스 3기
        • TIL(Today I Learn)
        • 숙제
        • 기타
      • 알고리즘 연습
        • 프로그래머스
        • 백준
  • 링크

    • 깃허브
    • 링크드인
  • 인기 글

  • 최근 글

  • 최근 댓글

  • hELLO· Designed By정상우.v4.10.3
기억에 남는 블로그 닉네임
[개인 프로젝트] 공모전 크롤링 (10) - 세부 페이지(검색 기능, 페이지네이션)
상단으로

티스토리툴바