import os import sys import time from datetime import datetime from stock.crawler.FnGuideCrawler import FnGuideCrawler from stock.crawler.MetaCrawler import MetaCrawler from stock.crawler.StockCrawler import StockCrawler class StockCrawlerDaily: PROJECT_HOME = None def __init__(self, PROJECT_HOME): self.PROJECT_HOME = PROJECT_HOME return def crawl(self): START_DATE = "2000.01.01" RESOURCE_PATH = os.path.join(self.PROJECT_HOME, 'resources') stockFileName = os.path.join(RESOURCE_PATH, 'stock.db') ERROR_COUNT = 0 while ERROR_COUNT < 3: try: # 재무제표는 3개월마다 다운로드를 한다. fnGuideCrawler = FnGuideCrawler(START_DATE) print("[KOSPI 상장기업 재무제표 다운로드]") fnGuideCrawler.crawl_fnguide(stockFileName) break except: ERROR_COUNT += 1 continue if ERROR_COUNT >= 3: exit() metaCrawler = MetaCrawler(START_DATE) ERROR_COUNT = 0 while ERROR_COUNT < 3: try: print("\n[증시자금동향 (신용잔고, 펀드자금 잔고)]") metaCrawler.crawl_money_trend(stockFileName) break except: ERROR_COUNT += 1 continue if ERROR_COUNT >= 3: exit() ERROR_COUNT = 0 while ERROR_COUNT < 3: try: print("\n[국내 시장금리]") metaCrawler.crawl_interest_rates(stockFileName) break except: ERROR_COUNT += 1 continue if ERROR_COUNT >= 3: exit() ERROR_COUNT = 0 while ERROR_COUNT < 3: try: print("\n[투자자별 매매동향(Trading_Trend)]") metaCrawler.crawl_trading_trend(stockFileName) break except: ERROR_COUNT += 1 continue if ERROR_COUNT >= 3: exit() ERROR_COUNT = 0 while ERROR_COUNT < 3: try: print("\n[환율 (USD, JPY, EUR, CNY, HKD, GBP, CAD, CHF, AUD, THB, INR, PHP, BRL, VND, RUB, TWD')]") metaCrawler.crawl_exchange(stockFileName) break except: ERROR_COUNT += 1 continue if ERROR_COUNT >= 3: exit() ERROR_COUNT = 0 while ERROR_COUNT < 3: try: print("\n[원유 (WTI), 국제금, COPPER, NATURALGAS, CORN, SOYBEAN 등]") metaCrawler.crawl_meterials(stockFileName) break except: ERROR_COUNT += 1 continue if ERROR_COUNT >= 3: exit() stockCrawler = StockCrawler(START_DATE) print("\n[국내 종목 수집]") stockCrawler.crawl_stocks(stockFileName) print("\n[국내 ETF 수집]") stockCrawler.crawl_etf_stocks(stockFileName) print("\n[US 종목 수집]") stockCrawler.crawl_special_stocks(stockFileName) return if __name__ == "__main__": # DB Browser for SQLite: http://hleecaster.com/python-sqlite3/ if len(sys.argv) == 2: PROJECT_HOME = sys.argv[1] else: PROJECT_HOME = os.getcwd() START_DATE = "2000.01.01" stockCrawlerDaily = StockCrawlerDaily(PROJECT_HOME) week = datetime.today().weekday() if week in (0, 1, 2, 3, 4): # 0:월, 1:화, 2:수, 3:목, 4:금, 5:토, 6:일 start = time.time() stockCrawlerDaily.crawl() today = datetime.now().strftime("%Y-%m-%d") print("time : %6.2f 초", (time.time() - start)) print("done...")