이 프로젝트는 로또 판매점과 당첨 정보를 크롤링하여 데이터베이스에 저장하는 시스템입니다. 매주 최신 로또 당첨 정보를 수집하고, 로또 판매점 정보를 주기적으로 업데이트합니다. 이 크롤러는 Amazon EC2에서 실행되며, 수집된 데이터는 AWS RDS PostgreSQL 데이터베이스에 저장됩니다.
- 전국 로또 판매점 정보 수집
- 매주 새로 페업한 판매점 확인 및 데이터베이스에서 삭제
- 매주 새로 개업한 판매점 확인 및 데이터베이스에서 추가
- 매주 판매점 정보 변경 사항 업데이트 (상호명, 전화번호, 경도, 위도, 주소 )
- 로또 당첨 내역 수집
- 매주 자동으로 새로운 회차의 당첨 내역 업데이트
- 데이터베이스 Materialized View 갱신
- 로깅을 통한 크롤링 과정 모니터링
.
├── Dockerfile
├── README.md
├── app
│ ├── __init__.py
│ ├── config
│ │ ├── config.py
│ │ └── logger.py
│ ├── crawler
│ │ ├── __init__.py
│ │ ├── lotto_store_crawler.py
│ │ ├── lotto_store_update_crawler.py
│ │ ├── lotto_winning_crawler.py
│ │ └── lotto_winning_update_crawler.py
│ ├── database.py
│ ├── models.py
│ ├── scheduler.py
│ └── utilities
│ ├── __init__.py
│ └── utils.py
├── lottomap-env
│ ├── bin
│ ├── include
│ ├── lib
│ └── pyvenv.cfg
└── requirements.txt
-
app폴더: 메인 애플리케이션 코드가 있는 폴더config폴더: 설정 파일들이 있는 폴더config.py: 애플리케이션 설정을 포함하는 파일입니다.logger.py: 로깅 설정을 포함하는 파일입니다.
crawler폴더: 크롤링 관련 파일들이 있는 폴더lotto_store_crawler.py: 처음 사용 시 로또 판매점 정보를 크롤링하는 스크립트입니다.lotto_store_update_crawler.py: 주기적인 로또 판매점 정보 업데이트를 위한 크롤링 스크립트입니다.lotto_winning_crawler.py: 처음 사용 시 로또 당첨 정보를 크롤링하는 스크립트입니다.lotto_winning_update_crawler.py: 주기적인 로또 당첨 정보 업데이트를 위한 크롤링 스크립트입니다.
utilities폴더: 유틸리티 함수들이 있는 폴더utils.py: 크롤링에 사용되는 유틸리티 함수들을 포함하는 파일입니다.
database.py: 데이터베이스 연결 설정을 포함하는 파일입니다.models.py: 데이터베이스 모델 정의를 포함하는 파일입니다.scheduler.py: 크롤링 작업을 스케줄링하는 스크립트입니다.
-
lottomap-env폴더: 가상 환경 관련 파일들이 있는 폴더bin,include,lib폴더: 가상 환경의 실행 파일, 헤더 파일, 라이브러리 파일들이 있는 폴더입니다.pyvenv.cfg: 가상 환경 설정 파일입니다.
-
Dockerfile: 애플리케이션을 Docker 컨테이너로 빌드하기 위한 Dockerfile입니다. -
requirements.txt: 프로젝트에 필요한 Python 패키지 목록입니다.
이 프로젝트 구조는 크롤링 작업을 모듈화하고 분리하여 유지 관리와 확장이 용이하도록 설계되었습니다. 주요 기능은 app 폴더 내의 파일들로 구성되어 있으며, 설정과 유틸리티 함수들은 별도의 폴더로 분리되어 있습니다. 또한 Dockerfile을 통해 애플리케이션을 Docker 컨테이너로 쉽게 배포할 수 있습니다.
- 🐍 Python
- 🕸️ Selenium
- 🌐 Requests
- 🗄️ SQLAlchemy
- 🐘 PostgreSQL
- 🐳 Docker
- .env 파일에 데이터베이스 URL을 설정합니다.
SQLALCHEMY_DATABASE_URL = "postgresql://username:password@host:port/database"
- app/config/config.py 파일에서 필요한 설정을 변경할 수 있습니다.
- 크롤러는 app/scheduler.py에 정의된 스케줄에 따라 실행됩니다.
- 기본적으로 60분마다 크롤러가 실행되도록 설정되어 있습니다.
- 스케줄링 주기를 변경하려면 app/scheduler.py의 schedule.every(60).minutes.do(run_crawlers) 부분을 수정하세요.
-
프로젝트를 클론합니다.
git clone https://github.com/your_username/lottomap-crawler.git -
프로젝트 디렉토리로 이동합니다.
cd lottomap-crawler -
Docker 이미지를 빌드합니다.
docker build -t lottomap-crawler . -
Docker 컨테이너를 실행합니다.
docker run -d --name lottomap-crawler lottomap-crawler
-
초기 로또 판매점 정보를 수집하려면 app/crawler/lotto_store_crawler.py를 실행합니다.
python app/crawler/lotto_store_crawler.py -
초기 로또 당첨 정보를 수집하려면 app/crawler/lotto_winning_crawler.py를 실행합니다.
python app/crawler/lotto_winning_crawler.py -
주기적인 로또 판매점 정보 및 로또 당첨 정보 업데이트를 위해 스케줄링하려면 app/scheduler.py를 실행합니다.
python app/scheduler.py
-
프로젝트를 실행하기 전에 .env 파일에 데이터베이스 연결 정보를 설정해야 합니다.
-
초기 크롤링 작업은 데이터베이스에 존재하지 않는 모든 로또 판매점과 당첨 정보를 수집합니다.
-
주기적인 업데이트 크롤링 작업은 이미 수집된 데이터를 기반으로 새로운 정보만 업데이트합니다.
-
크롤링 작업은 스케줄러에 의해 자동으로 실행되며, 스케줄링 주기는 app/scheduler.py에서 설정할 수 있습니다.
위의 설치 및 실행 과정은 프로젝트를 Docker 컨테이너로 배포하고 실행하는 방법을 설명합니다. 먼저 프로젝트를 클론하고 Docker 이미지를 빌드한 후, 컨테이너를 실행합니다. 그 후에는 각 크롤링 작업을 개별적으로 실행하거나 스케줄러를 통해 자동화할 수 있습니다. 프로젝트를 실행하기 전에는 데이터베이스 연결 정보를 설정해야 합니다.
- 크롤링 과정은 app/config/logger.py에 정의된 로거를 통해 모니터링됩니다.
- 로그는 콘솔과 crawler.log 파일에 출력됩니다.
- 로그 레벨과 포맷은 app/config/logger.py에서 설정할 수 있습니다.
LottoStore: 로또 판매점 정보를 저장하는 모델입니다.id: 판매점 고유 식별자 (Primary Key)name: 판매점 이름address: 판매점 주소phone: 판매점 전화번호lat: 판매점 위도lon: 판매점 경도winning_infos: 당첨 정보와의 관계 (One-to-Many)
WinningInfo: 로또 당첨 정보를 저장하는 모델입니다.id: 당첨 정보 고유 식별자 (Primary Key)store_id: 판매점 식별자 (Foreign Key)draw_no: 회차 번호rank: 당첨 순위category: 당첨 카테고리store: 판매점과의 관계 (Many-to-One)
이름: KinaJin 이메일: kinajin22@gmail.com
이 프로젝트는 MIT 라이센스를 따릅니다.