Skip to content

CrameProject/crawler-python

Repository files navigation

한국 경제 데이터 수집 크롤러

암호화폐 관련 뉴스와 경제지표를 자동으로 수집하여 MongoDB에 저장하는 Docker 기반 크롤링 시스템입니다.

📋 목차

🏗 시스템 구성

크롤러 종류

  1. 뉴스 크롤러 (naver_news_crawler.py)

    • 네이버 뉴스에서 암호화폐 관련 기사 수집
    • 키워드: 비트코인, 리플, 이더리움 등
  2. 경제지표 크롤러 (economic_indicator_crawler.py)

    • 한국투자증권(kr.investing.com)에서 경제지표 수집
    • 대상 국가: 미국, 한국, 일본, 중국

기술 스택

  • 런타임: Python 3.10 + Docker
  • 웹 스크래핑: Selenium + BeautifulSoup4
  • 데이터베이스: MongoDB
  • 스케줄링: Cron

🚀 설치 및 실행

전제조건

  • Docker 설치
  • MongoDB 컨테이너 실행 중

MongoDB 실행 (배포 환경 시뮬레이션)

# MongoDB 컨테이너 실행
docker run -d --name mongodb -p 27017:27017 mongo:6.0

크롤러 실행

# 1. 크롤러 이미지 빌드
docker build -t crawler .

# 2. 크롤러 실행 (MongoDB와 연결)
docker run -d --name crawler --link mongodb:mongodb crawler

개별 크롤러 실행 (테스트용)

# 뉴스 크롤러만 실행
docker run --rm --link mongodb:mongodb crawler python /app/naver_news_crawler.py

# 경제지표 크롤러만 실행
docker run --rm --link mongodb:mongodb crawler python /app/economic_indicator_crawler.py

📊 데이터 수집

1. 뉴스 크롤러

수집 대상: 네이버 뉴스 암호화폐 관련 기사 키워드: 비트코인, 리플, 이더리움

수집 정보:

  • 제목, 요약, 언론사, 발행시간
  • 기사 URL, 이미지 URL
  • 매칭된 키워드 배열

2. 경제지표 크롤러

수집 대상: 한국투자증권 경제지표 데이터 날짜 범위: 어제부터 60일 후까지 국가: 미국, 한국, 일본, 중국

수집 정보:

  • 지표명, 실제값, 예상값, 이전값
  • 발표일시, 중요도, 국가/통화
  • UUID, 생성/수정 시간

🗄 데이터베이스 구조

MongoDB 데이터베이스: crame

1. 뉴스 컬렉션: news (추정)

{
  "news_uuid": "uuid",
  "title": "기사 제목",
  "summary": "기사 요약", 
  "publisher": "언론사",
  "url": "기사 URL",
  "date": "발행일시 (ISO 8601)",
  "img_url": "이미지 URL",
  "keywords": ["비트코인", "이더리움"]
}

2. 경제지표 컬렉션: economic_indicator

{
  "economic_uuid": "uuid",
  "date": "2025-08-24",
  "time": "09:00",
  "country": "한국",
  "currency": "KRW", 
  "indicator_name": "소비자물가지수 (YoY)",
  "actual_value": "2.1%",
  "forecast_value": "2.0%",
  "previous_value": "2.2%",
  "importance": 2,
  "importance_text": "Medium",
  "source": "kr.investing.com",
  "created_at": "ISO 시간",
  "updated_at": "ISO 시간"
}

인덱스 설정

  • 뉴스: URL 기준 중복 방지, TTL(24시간)
  • 경제지표: 날짜+시간+국가+지표명 복합 인덱스, TTL(1년)

⏰ 스케줄링

자동 실행 스케줄

  • 뉴스 크롤러: 매시간 (0 * * * *)
  • 경제지표 크롤러: 매일 자정 (0 0 * * *)

초기 실행

컨테이너 시작 시 두 크롤러가 각각 1회씩 실행된 후 크론 모드로 전환

📈 모니터링

로그 확인

# 크롤러 전체 로그
docker logs crawler

# 실시간 로그 모니터링  
docker logs -f crawler

# 크론 로그 확인
docker exec crawler tail -f /var/log/cron.log

MongoDB 데이터 확인

# MongoDB 컨테이너 접속
docker exec -it mongodb mongosh

# 데이터베이스 선택 및 확인
use crame
show collections
db.economic_indicator.countDocuments()
db.economic_indicator.find().limit(5)

컨테이너 상태 확인

# 실행 중인 컨테이너 확인
docker ps

# 컨테이너 리소스 사용량
docker stats crawler mongodb

🔧 설정 정보

환경 변수

  • TZ=Asia/Seoul: 시간대 설정

데이터 보관 정책

  • 뉴스: 24시간 후 자동 삭제 (TTL)
  • 경제지표: 1년 후 자동 삭제 (TTL)

중복 처리

  • 뉴스: URL 기준 중복 시 키워드만 업데이트
  • 경제지표: 날짜+시간+국가+지표명 기준 중복 시 값 업데이트

🛠 문제 해결

일반적인 문제

  1. MongoDB 연결 실패: MongoDB 컨테이너 실행 상태 확인
  2. 크롤링 실패: 웹사이트 구조 변경 또는 차단 확인
  3. 메모리 부족: Docker 리소스 할당량 증가

디버깅

# 크롤러 컨테이너 내부 접속
docker exec -it crawler bash

# Python 스크립트 직접 실행
python /app/naver_news_crawler.py
python /app/economic_indicator_crawler.py

📝 개발 정보

개발 환경: macOS + Docker Desktop
배포 환경: Linux Docker + MongoDB
데이터 활용: 암호화폐 시장 분석을 위한 뉴스/경제지표 수집


🎯 수집되는 경제지표 (60개 범주)

💰 통화정책 (11개)

  • 기준금리, 콜금리, CD금리, 국고채 수익률(1~10년), 회사채 수익률, 통화량(M1, M2 등)

📊 인플레이션 (7개)

  • 소비자물가지수, 생산자물가지수, 근원물가, 수출입물가지수

💱 환율 & 외환 (5개)

  • 원/달러, 원/엔, 원/유로, 원/위안 환율, 외환보유액

🏭 실물경제 (8개)

  • GDP, 산업생산지수, 설비투자지수, 건설기성액

📦 대외거래 (6개)

  • 수출액, 수입액, 무역수지, 경상수지

💼 고용시장 (5개)

  • 실업률, 고용률, 경제활동참가율, 취업자수

기타

  • 소비심리, 투자심리, 자산시장, 금융여신, 글로벌 자금 지표 등

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 2

  •  
  •