앞서 데이터를 가지고 오는 소스를 보시면, 

한국 주식시장에 상장된 전 종목에 대한 데이터를 갖고 오게 됩니다.

그런데 이 데이터를 웹브라우저를 사용해서 갖고오기 때문에 (이를 크롤러라고 합니다)

1종목의 100여 페이지 (1페이지당 10개 x 100 => 1000 일봉 (HTS 등에선 한번에 900봉씩 가지고 옵니다))
의 데이터 갖고오는데 1,2 분정도 걸립니다.

 

한국 주식 종목의 수가 약 2300개쯤 되는데 1종목에 1,2분이면

60분 * 24시간 = 1440분 / 2 = 720개 ~ 1000개 종목을 갖고오게 됩니다.

 

물론 이걸 주말이든 해서 다 가져와도 상관없지만...

필요없는 데이터는 추리고 의미 있는 (거래량 많은 변동성 좋은) 종목으로 하는것이 시스템 매매에 좋습니다.

 

그래서 여기서는 몇몇 대중적인 (주관적으로) 주식 데이터를 긁어볼려고 합니다.

 

물론 다 text 파일에 종목을 긁어 놓을꺼니까, text 파일만 수정하면 원하시는 종목을 더 갖고오게 됩니다.

아래와 같은 targetList.txt 파일을 만들어 줍니다.

 

아래와 같이 main.py에 targetList를 읽어 주고,

크롤링 하기전에 targetList에 있는 종목인지 확인하는 코드를 넣어 줍니다.

# 필요한 모듈 설치
# pip install pandas
# pip install pandas-datareader
# pip install dataframe

import pandas as pd 
import dataframe
import sqlite3
import datetime
import WebStockDataGetter
import SqliteStockDB

# 메인 함수 시작
if __name__ == '__main__':
    # 설정파일. 웹페이지의 1페이지당 10일치 데이터가 있는데, 몇개 웹페이지를 긁을지 설정
    f = open("./config.txt", 'r')
    if f.readable == False:
        print("! have not config file.")
        exit
     
    maxGetPage = f.readline().strip()
    f.close()

    # 타켓 종목만 고르기
    f = open("./targetList.txt", "r", encoding="utf-8")
    targetList = f.read().splitlines()
    f.close()

    # 네이버 데이터 크롤러
    getter = WebStockDataGetter.naverGetter()
    stockDf = getter.getKoreaStocks()

    # Sqlite에 데이터 저장
    dayPriceDB = SqliteStockDB.dayPriceDB('KoreaStockData.db')
    totalCount = len(stockDf)

    # 주식의 일자데이터 url 가져오기 
    for idxi, rowCode in stockDf.iterrows():
        code = rowCode['code']
        name = rowCode['name']      
        if name in targetList:
            print(name)
        else:
            continue

        # DB에 데이터가 없으면 테이블을 만듬
        tableName = dayPriceDB.tableName(code)
        if dayPriceDB.checkTable(tableName) == False:
            dayPriceDB.createTable(tableName)

        # 크롤러에게 code 넘기고 넷 데이터 긁어오기
        df = getter.getAllStockDays(code, maxGetPage)
        data = pd.DataFrame(df, columns=['날짜', '시가', '고가', '저가', '종가', '거래량'])
                                
        # 데이터 저장
        dayPriceDB.save(tableName, data)
        log = "====== 주식 일봉 데이터 [%s] 저장 완료 (%d/%d) =====" % (name, idxi, totalCount)
        print(log)

 

+ Recent posts