Skip to content

Crawling hotel data on 3 hotel reservation platforms in realtime, enabling users to compare them and reserve a room with the best price.

Notifications You must be signed in to change notification settings

EbraLim/dss_project_Crawling

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

84 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

[Crawling Project]
호텔 당일예약 통합 비교 서비스

0. 요약

 1) Top3 국내숙박 예약 플랫폼의 상품들을 한 곳에 집약함으로써 쉽고 빠른 상품비교 및 예약을 돕고자 함
 2) 데이터는 5분 간격으로 자동 업데이트되어 DB에 적재되며, 웹을 통해 서비스됨
    (Crontab, MongoDB, Flask 사용)

1. 소개

1) 주제

  • Top3 국내숙박 예약 플랫폼에 등록된 서울 내 호텔의 예약가능 객실데이터 실시간 취합

2) 기획의도 및 기대효과

  • 플랫폼 간 상품 구성은 상이하며, 동일한 상품이라도 플랫폼 간 가격 차이가 종종 존재함
  • 상품 비교를 위해 유저들은 여러 플랫폼을 함께 사용하며, 타 플랫폼을 다녀왔을 때 원하는 객실이 이미 품절되어 있는 등의 불편한 사용경험 존재
  • 예약가능한 객실 데이터를 한 곳에 모아 비교가능하게 함으로써, 상품비교부터 결제까지의 소요시간을 단축하고, 비교하다가 원하는 방을 놓치는 문제를 해결함으로써 더 나은 고객경험을 제공하고자 함

2. 시스템 구조

map_image

3. 각 단계별 상세설명

1) Crontab

  • 3개의 쉘스크립트 (호텔별 각 1개)를 실행하는 역할을 수행하며, 5분 주기로 실행되도록 세팅되어 있음

2) 쉘스크립트 (야놀자)

  • 야놀자 사이트에서 호텔별 상세정보를 크롤링하여 취합한 후, MongoDB에 데이터를 적재하도록 제작됨
  • yanolja.py 모듈은 호텔별 고유ID값을 가져오는 역할을 수행하며, 호텔별 고유ID는 각 호텔의 상세페이지 url 생성 시 필요
  • Scrapy framework (Spider)를 사용하여 크롤링을 진행하며 items.py에 데이터를 적재하고, 적재 완료 후 pipelines.py가 실행되며 MongoDB로 데이터 전송

3) 쉘스크립트 (여기어때)

  • 여기어때 사이트에서 호텔별 상세정보를 크롤링하여 취합한 후, Mongodb에 데이터를 적재하도록 제작됨
  • 별도의 모듈은 제작하지 않음
  • Scrapy framework (Spider)를 사용하여 크롤링을 진행하며 items.py에 데이터를 적재하고, 적재 완료 후 pipelines.py가 실행되며 MongoDB로 데이터 전송함

4) 쉘스크립트 (데일리호텔)

  • 데일리호텔 사이트에서 호텔별 상세정보를 크롤링하여 취합한 후, Mongodb에 데이터를 적재하도록 제작됨
  • dailyhotel_keys.py 모듈은 호텔별 고유ID값을 가져오는 역할을 수행하며, 호텔별 고유ID는 각 호텔의 상세페이지 url 구성 시 필요
  • Scrapy framework (Spider)를 사용하여 크롤링을 진행하며 items.py에 데이터를 적재하고, 적재 완료 후 pipelines.py가 실행되며 MongoDB로 데이터 전송함

5) MongoDB

  • 실시간에 가깝게 데이터를 적재한다는 특성상 빠른 업로드가 중요하다고 판단, NoSQL 계열의 MongoDB를 사용
  • Flask를 통한 웹 배포 시 최신 데이터 필터링에 활용하기 위해 'date' 열은 '년월일 - 시분'까지 반영
  • 1사이클 당 데이터가 7,000~8,000행 수준으로 업데이트된다는 점을 고려하여, MongoDB Collection 크기는 1시간 정도의 분량인 100,000 행으로 설정
    (100,000행이 넘어가면 가장 오래된 데이터부터 순차적으로 삭제됨)

6) Flask

  • MongoDB에서 최신 1사이클의 데이터셋만을 전송받아 웹으로 배포하며, 구분 기준은 'date' 열을 사용함
  • 배포 시, 'Price' 열값이 0인 행들은 제외됨
  • 원하는 지역이나 호텔의 이름을 입력하고 'search' 버튼을 클릭하면 조건에 맞는 호텔 리스트가 출력되며, 해당 행의 'Link' 열값을 클릭하여 예약페이지로 이동 가능

4. 프로세스 예시 화면

process_image

5. 멤버 & 수행업무

  • 임현수

    • Scrapy framework (Spider)를 사용하여 여기어때 & 데일리호텔 크롤링 및 쉘스크립트 작성
    • 리드미 작성 및 프레젠테이션 자료 제작 (메인)
  • 최민권

    • Scrapy framework (Spider)를 사용하여 야놀자 크롤링 및 쉘스크립트 작성
    • Crontab 설정 및 Flask를 활용하여 AWS 웹서버 배포
    • 리드미 작성 및 프레젠테이션 자료 제작 (서브)

※ 본 프로젝트는 패스트캠퍼스 데이터사이언스 취업스쿨 16th 크롤링 프로젝트로 진행되었습니다.

About

Crawling hotel data on 3 hotel reservation platforms in realtime, enabling users to compare them and reserve a room with the best price.

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published