프로그래밍/프로젝트

과제 겸 재미로 만들어본 중고나라 크롤러

hamin0118 2024. 9. 1. 17:07

사실 6월에 만든 프로그램이지만 이제야 올립니다

 

개요

 

프로젝트 배경

최근 중고 거래가 활발하게 일어나게 되면서 중고 거래 사이트가 늘어나게 되었고 소비자들은 정보의 바다 속에서 원하는 물건을 쉽게 비교하지 못하게 되었다. 따라서 수많은 중고거래를 한눈에 비교하는 것이 필요하며, 원하는 물건을 쉽게 찾는 프로그램을 제작하기로 하였다.

 

프로젝트 목표

 현재 존재하는 국내 최대 규모의 중고거래 플랫폼인 중고나라’, 패션 중고 거래 플랫폼 후르츠패밀리헬로마켓’, 중고 서점 플랫폼 알라딘‘yes24’까지 총 5곳을 선정하였다. 위 사이트들을 토대로 원하는 중고 물품을 크롤링하여서 한눈에 비교할 수 있는 프로그램을 제작하는 것이 목표이다. 이를 통해 소비자의 피로도 감소와 편리함을 줄 것으로 기대된다.

주요 기능은 Tk창을 이용한 퀵서치기능과 세부 정보, 이미지, 접속 링크를 지원하는 web사이트로 나뉜다.

 

 

개발 환경

 

사용 언어 및 기술

사용 언어: Python, JavaScript, HTML, CSS

 

 

 

시스템 아키텍처

Class Diagram

 

 

main: main.py 파일의 역할을 나타낸다. start_flask() start_tkinter() 메서드는 각각 Flask Tkinter 애플리케이션을 시작한다. 이를 통해 main 클래스가 FlaskApp SearchApp을 시작하는 관계를 가지고 있다.

FlaskApp: app.py에서 정의된 Flask 애플리케이션을 나타낸다. run_flask() 메서드는 Flask 서버를 실행하고, index(), search(), search_sorted() 메서드는 웹 요청을 처리한다. FlaskApp은 웹 요청을 처리하고 데이터를 렌더링한다.

 

SearchApp: gui.py에서 정의된 Tkinter 기반 GUI 애플리케이션을 나타내고 GUI를 초기화하며 사용자의 입력을 받아 크롤링 결과를 표시한다.

search(), display_results(keyword), display_filtered_results(results), sort_by_price(),

display_sorted_results(results), on_closing(), select_electronics(), select_books(), select_clothing(),

select_all() 등의 메서드를 통해 GUI의 다양한 기능을 제공한다.

 

Crawler Classes: 각각의 크롤러 클래스는 웹 사이트에서 데이터를 크롤링하는 역할을 한다.

“AladinCrawler”, “FruitfamilyCrawler”, “HellomarketCrawler”, “JoongonaraCrawler”

“Yes24Crawler” 이들은 모두 FlaskApp SearchApp에서 사용된다.

 

HTMLTemplates: templates 디렉토리에 있는 HTML 파일이다. index.html results.html Flask 애플리케이션에서 렌더링된다.

StaticFiles: static 디렉토리에 있는 정적 파일들이다. results.css, results.js, styles.css는 웹 페이지의 스타일과 기능을 정의한다.

 

기능 구현 및 테스트

주요 화면

 

 

-      TK

-      1. 사용자는 프로그램을 실행하여 검색어를 입력한다.

-      2. 최소 및 최대 가격, 종류를 입력하고 종류를 선택하여 검색 범위를 좁힌다.

-      3. ‘검색' 버튼을 눌러 결과를 조회한다.

-      4. 결과가 표시되면, 사용자는 결과를 검토하고 퀵서칭된 정보를 본다. 선택사항으로 낮은 가격순버튼을 클릭하여 낮은 가격순대로 비교한다.

 

 

 종류 선택 버튼에 대해서 전자기기버튼을 선택하면 중고나라헬로마켓을 크롤링한다. ‘버튼을 선택하면 알라딘‘yes24’사이트를 크롤링한다. ‘버튼을 선택하면 중고나라, ‘헬로마켓’, ‘후르츠패밀리사이트가 크롤링 된다. 버튼을 선택하지 않거나 선택사항없음버튼을 클릭하면 5개 사이트 모두 크롤링 되어 결과를 나타낸다.

 

 

<Tk창 결과>

 

 

-      Web page

-      1. 사용자는 프로그램을 열고 검색어를 입력합니다.

-      2. 최소 및 최대 가격을 설정하여 검색 범위를 좁힙니다.

-      3. '검색' 버튼을 눌러 결과를 조회합니다.

-      4. 결과가 표시되면, 사용자는 결과를 검토하고 원하는 상품의 링크를 클릭하여 더 자세한 정보를 봅니다.  선택사항으로 낮은 가격순버튼을 클릭하여 낮은 가격순서로 비교한다.

 

 

 

<Web page 결과>

 

 

 

 

결론 및 제언

 

 프로그램을 작동시킨 다음 Tk 창에서 원하는 물품을 검색창에 입력하고 최소, 최대 가격을 조정하였다. ‘전자기기버튼을 선택하면 중고나라헬로마켓을 크롤링 한다. ‘버튼을 선택하면 알라딘‘yes24’사이트를 크롤링 한다. ‘버튼을 선택하면 중고나라, ‘헬로마켓’, ‘후르츠패밀리사이트가 크롤링 된다. Web page에서도 가격 설정하고 검색을 하면, 마켓 이름, 타이틀, 이미지, 접속 링크까지 제공된다. 검색 기능은 의도한 대로 작동하며, 사용자가 입력한 키워드를 바탕으로 데이터를 수집하여 출력한다. 모든 플랫폼에서 검색 결과가 잘 통합되어 표시되며 프로젝트는 전반적으로 잘 구성되어 있고 기능적으로 유용합니다.

개선할 점으로는 여러 크롤러의 사용과 결과 처리 사이의 타이밍 관리가 더 명확해질 필요가 있다. 특히 web page에서 크롤링을 진행할 때 1 13, Tk 창에서 51초가 걸렸으므로, Tk 창에서 크롤링 할 때보다 22초가 더 걸렸다. 대부분의 예외 상황이 적절하게 처리되고 있으나, 일부 크롤링 중 발생할 수 있는 네트워크 오류나 데이터 파싱 오류에 대한 처리 로직이 부족하다.

 

참고자료

https://wikidocs.net/7, 점프 투 파이썬, 01-3 파이썬으로 무엇을 할 수 있을까?

https://flask-docs-kr.readthedocs.io/ko/latest/ , flask 문서

 

 

코드 참고 github 레포지토리

https://github.com/Lyuhamin/python_programing.git