This commit is contained in:
dosang.yoon
2022-06-03 13:44:37 +09:00
parent 0b49e88adf
commit 617db82e60
11 changed files with 34 additions and 37 deletions

View File

@@ -1,4 +1,4 @@
import win32com.client #import win32com.client
import time import time
from hts.OrderItem import OrderItem from hts.OrderItem import OrderItem

View File

@@ -1,4 +1,3 @@
import win32com.client
import time import time
import os import os
from datetime import datetime from datetime import datetime

View File

@@ -1,4 +1,3 @@
import win32com.client
import time import time
import os import os
from datetime import datetime from datetime import datetime

View File

@@ -1,14 +1,10 @@
import win32com.client
import time import time
import os import os
from datetime import datetime from datetime import datetime, timedelta
import pandas as pd import pandas as pd
from hts.HTS import HTS from hts.HTS import HTS
from hts.BuySellChecker import BuySellChecker
class DataDownloader (HTS): class DataDownloader (HTS):
buySellChecker = None buySellChecker = None
@@ -20,7 +16,7 @@ class DataDownloader (HTS):
return return
# 주식 현재가 조회 # 주식 현재가 조회
def writeStockData(self, stock_code, given_day): def writeStockData(self, stock_code, given_day, type, outDir):
objCpCybos = win32com.client.Dispatch("CpUtil.CpCybos") objCpCybos = win32com.client.Dispatch("CpUtil.CpCybos")
bConnect = objCpCybos.IsConnect bConnect = objCpCybos.IsConnect
if (bConnect == 0): if (bConnect == 0):
@@ -30,14 +26,14 @@ class DataDownloader (HTS):
# 차트 객체 구하기 # 차트 객체 구하기
objStockChart = win32com.client.Dispatch("CpSysDib.StockChart") objStockChart = win32com.client.Dispatch("CpSysDib.StockChart")
outfp = open("./data/"+stock_code+"_"+given_day+".csv", mode="w", encoding="utf-8") outfp = open(outDir+"/"+stock_code+"_"+given_day+"_"+type+".csv", mode="w", encoding="utf-8")
objStockChart.SetInputValue(0, 'A' + stock_code) # 종목 코드 objStockChart.SetInputValue(0, 'A' + stock_code) # 종목 코드
objStockChart.SetInputValue(1, ord('1')) # 1: 기간으로 조회, 2: 개수로 조회 objStockChart.SetInputValue(1, ord('1')) # 1: 기간으로 조회, 2: 개수로 조회
objStockChart.SetInputValue(2, given_day) # 기간 조회 시, 시작일 objStockChart.SetInputValue(2, given_day) # 기간 조회 시, 시작일
objStockChart.SetInputValue(3, given_day) # 기간 조회 시, 종료일 objStockChart.SetInputValue(3, given_day) # 기간 조회 시, 종료일
objStockChart.SetInputValue(4, 400) # 조회 시 가져오는 Line 개수 objStockChart.SetInputValue(4, 400) # 조회 시 가져오는 Line 개수
objStockChart.SetInputValue(5, [0, 1, 2, 3, 4, 5, 8]) # 날짜,시간,시가,고가,저가,종가,거래량 objStockChart.SetInputValue(5, [0, 1, 2, 3, 4, 5, 8]) # 날짜,시간,시가,고가,저가,종가,거래량
objStockChart.SetInputValue(6, ord('m')) # '차트 주가 - 월(M), 주(W), 일(D), 시(H), 분(m), 초(S) 차트 요청 objStockChart.SetInputValue(6, ord(type)) # '차트 주가 - 월(M), 주(W), 일(D), 시(H), 분(m), 초(S) 차트 요청
objStockChart.SetInputValue(7, 1) objStockChart.SetInputValue(7, 1)
objStockChart.SetInputValue(9, ord('1')) # 수정주가 사용 objStockChart.SetInputValue(9, ord('1')) # 수정주가 사용
objStockChart.BlockRequest() objStockChart.BlockRequest()
@@ -287,13 +283,16 @@ if __name__ == "__main__":
today = datetime.today() today = datetime.today()
PROJECT_HOME = os.path.join(os.path.dirname(os.path.join(os.path.dirname(__file__)))) PROJECT_HOME = os.path.join(os.path.dirname(os.path.join(os.path.dirname(__file__))))
RESOURCE_DIR = PROJECT_HOME + "/resources/analysis/"+today.strftime("%Y%m%d") RESOURCE_DIR = PROJECT_HOME + "/resources/data"
# KODEX 인버스 * 2
stock_code = "252670" stock_code = "252670"
dataDownloader = DataDownloader() dataDownloader = DataDownloader()
given_day = datetime.today().strftime('%Y%m%d')
dataDownloader.writeStockData(stock_code, "20220520") for i in range(1, 1000):
given_day = datetime.today() - timedelta(i)
# '차트 주가 - 월(M), 주(W), 일(D), 시(H), 분(m), 초(S) 차트 요청
dataDownloader.writeStockData(stock_code, given_day.strftime('%Y%m%d'), 'm', RESOURCE_DIR)
dataDownloader.writeStockData(stock_code, given_day.strftime('%Y%m%d'), 'S', RESOURCE_DIR)
print ("done...") print ("done...")

View File

@@ -52,7 +52,7 @@ class MetaCrawler:
html = None html = None
while True: while True:
try: try:
html = pd.read_html(requests.get(input['URL'] + '&page=%s' % i, headers=self.header, timeout=5).text) html = pd.read_html(requests.get(input['URL'] + '&page=%s' % i, headers=self.header, timeout=30).text)
sleep(0.5) sleep(0.5)
break break
except: except:
@@ -136,7 +136,7 @@ class MetaCrawler:
html = None html = None
while True: while True:
try: try:
html = pd.read_html(requests.get(url + str(i), headers=self.header, timeout=5).text) html = pd.read_html(requests.get(url + str(i), headers=self.header, timeout=30).text)
sleep(0.5) sleep(0.5)
break break
except: except:
@@ -214,7 +214,7 @@ class MetaCrawler:
html = None html = None
while True: while True:
try: try:
html = pd.read_html(requests.get(url + str(i), headers=self.header, timeout=5).text, encoding='euc-kr') html = pd.read_html(requests.get(url + str(i), headers=self.header, timeout=30).text, encoding='euc-kr')
sleep(0.5) sleep(0.5)
break break
except: except:
@@ -301,7 +301,7 @@ class MetaCrawler:
html = None html = None
while True: while True:
try: try:
html = pd.read_html(requests.get(input['URL'] + '&page=%s' % i, headers=self.header, timeout=5).text) html = pd.read_html(requests.get(input['URL'] + '&page=%s' % i, headers=self.header, timeout=30).text)
sleep(0.5) sleep(0.5)
break break
except: except:
@@ -383,7 +383,7 @@ class MetaCrawler:
html = None html = None
while True: while True:
try: try:
html = pd.read_html(requests.get(input['URL'] + '&page=%s' % i, headers=self.header, timeout=5).text) html = pd.read_html(requests.get(input['URL'] + '&page=%s' % i, headers=self.header, timeout=30).text)
sleep(0.5) sleep(0.5)
break break
except: except:

View File

@@ -45,7 +45,7 @@ class StockCrawler:
def getStockInfo(self): def getStockInfo(self):
#code_df = pd.read_html('http://kind.krx.co.kr/corpgeneral/corpList.do?method=download&searchType=13', header=0)[0] #code_df = pd.read_html('http://kind.krx.co.kr/corpgeneral/corpList.do?method=download&searchType=13', header=0)[0]
code_df = pd.read_html(requests.get('http://kind.krx.co.kr/corpgeneral/corpList.do?method=download&searchType=13', headers=self.header, timeout=5).text)[0] code_df = pd.read_html(requests.get('http://kind.krx.co.kr/corpgeneral/corpList.do?method=download&searchType=13', headers=self.header, timeout=30).text)[0]
# code_df = pd.read_excel('../resources/stock/상장법인목록.xls') # code_df = pd.read_excel('../resources/stock/상장법인목록.xls')
# 종목코드가 6자리이기 때문에 6자리를 맞춰주기 위해 설정해줌 # 종목코드가 6자리이기 때문에 6자리를 맞춰주기 위해 설정해줌
@@ -382,7 +382,7 @@ class StockCrawler:
html = None html = None
while True: while True:
try: try:
html = pd.read_html(requests.get(pg_url, headers=self.header, timeout=5).text) html = pd.read_html(requests.get(pg_url, headers=self.header, timeout=30).text)
sleep(0.5) sleep(0.5)
break break
except: except:

View File

@@ -10,7 +10,7 @@ class FnGuideCrawler:
def getStockInfo(self): def getStockInfo(self):
#code_df = pd.read_html('http://kind.krx.co.kr/corpgeneral/corpList.do?method=download&searchType=13', header=0)[0] #code_df = pd.read_html('http://kind.krx.co.kr/corpgeneral/corpList.do?method=download&searchType=13', header=0)[0]
code_df = pd.read_html(requests.get('http://kind.krx.co.kr/corpgeneral/corpList.do?method=download&searchType=13', headers=self.header, timeout=5).text)[0] code_df = pd.read_html(requests.get('http://kind.krx.co.kr/corpgeneral/corpList.do?method=download&searchType=13', headers=self.header, timeout=30).text)[0]
# code_df = pd.read_excel('../resources/stock/상장법인목록.xls') # code_df = pd.read_excel('../resources/stock/상장법인목록.xls')
# 종목코드가 6자리이기 때문에 6자리를 맞춰주기 위해 설정해줌 # 종목코드가 6자리이기 때문에 6자리를 맞춰주기 위해 설정해줌

View File

@@ -46,7 +46,7 @@ class MetaCrawler:
finish = False finish = False
for i in range(1, self.limit_page_count): for i in range(1, self.limit_page_count):
#html = pd.read_html(input['URL'] + '&page=%s' % i, header=0) #html = pd.read_html(input['URL'] + '&page=%s' % i, header=0)
html = pd.read_html(requests.get(input['URL'] + '&page=%s' % i, headers=self.header, timeout=5).text) html = pd.read_html(requests.get(input['URL'] + '&page=%s' % i, headers=self.header, timeout=30).text)
sleep(0.5) sleep(0.5)
# 마지막 페이지 까지 받기 # 마지막 페이지 까지 받기
@@ -120,7 +120,7 @@ class MetaCrawler:
finish = False finish = False
for i in range(1, self.limit_page_count): for i in range(1, self.limit_page_count):
#html = pd.read_html(url + str(i), header=0) #html = pd.read_html(url + str(i), header=0)
html = pd.read_html(requests.get(url + str(i), headers=self.header, timeout=5).text) html = pd.read_html(requests.get(url + str(i), headers=self.header, timeout=30).text)
sleep(0.5) sleep(0.5)
# 마지막 페이지 까지 받기 # 마지막 페이지 까지 받기
@@ -181,7 +181,7 @@ class MetaCrawler:
finish = False finish = False
for i in range(1, self.limit_page_count): for i in range(1, self.limit_page_count):
#html = pd.read_html(url + str(i), header=0, encoding='euc-kr') #html = pd.read_html(url + str(i), header=0, encoding='euc-kr')
html = pd.read_html(requests.get(url + str(i), headers=self.header, timeout=5).text, encoding='euc-kr') html = pd.read_html(requests.get(url + str(i), headers=self.header, timeout=30).text, encoding='euc-kr')
sleep(0.5) sleep(0.5)
# 마지막 페이지 까지 받기 # 마지막 페이지 까지 받기
@@ -253,7 +253,7 @@ class MetaCrawler:
finish = False finish = False
for i in range(1, self.limit_page_count): for i in range(1, self.limit_page_count):
#html = pd.read_html(input['URL'] + '&page=%s' % i, header=0) #html = pd.read_html(input['URL'] + '&page=%s' % i, header=0)
html = pd.read_html(requests.get(input['URL'] + '&page=%s' % i, headers=self.header, timeout=5).text) html = pd.read_html(requests.get(input['URL'] + '&page=%s' % i, headers=self.header, timeout=30).text)
sleep(0.5) sleep(0.5)
# 마지막 페이지 까지 받기 # 마지막 페이지 까지 받기

View File

@@ -74,7 +74,7 @@ class StockCrawler:
def getStockInfo(self): def getStockInfo(self):
#code_df = pd.read_html('http://kind.krx.co.kr/corpgeneral/corpList.do?method=download&searchType=13', header=0)[0] #code_df = pd.read_html('http://kind.krx.co.kr/corpgeneral/corpList.do?method=download&searchType=13', header=0)[0]
code_df = pd.read_html(requests.get('http://kind.krx.co.kr/corpgeneral/corpList.do?method=download&searchType=13', headers=self.header, timeout=5).text)[0] code_df = pd.read_html(requests.get('http://kind.krx.co.kr/corpgeneral/corpList.do?method=download&searchType=13', headers=self.header, timeout=30).text)[0]
# code_df = pd.read_excel('../resources/stock/상장법인목록.xls') # code_df = pd.read_excel('../resources/stock/상장법인목록.xls')
# 종목코드가 6자리이기 때문에 6자리를 맞춰주기 위해 설정해줌 # 종목코드가 6자리이기 때문에 6자리를 맞춰주기 위해 설정해줌
@@ -255,7 +255,7 @@ class StockCrawler:
# 최근 상장 기업의 마지막 반복되는 페이지를 제외시킨다. # 최근 상장 기업의 마지막 반복되는 페이지를 제외시킨다.
pg_url = '{url}&page={page}'.format(url=url, page=page) pg_url = '{url}&page={page}'.format(url=url, page=page)
#html = pd.read_html(pg_url, header=0) #html = pd.read_html(pg_url, header=0)
html = pd.read_html(requests.get(pg_url, headers=self.header, timeout=5).text) html = pd.read_html(requests.get(pg_url, headers=self.header, timeout=30).text)
sleep(0.5) sleep(0.5)
count = 0 count = 0
@@ -379,7 +379,7 @@ class StockCrawler:
# 최근 상장 기업의 마지막 반복되는 페이지를 제외시킨다. # 최근 상장 기업의 마지막 반복되는 페이지를 제외시킨다.
pg_url = '{url}&page={page}'.format(url=url, page=page) pg_url = '{url}&page={page}'.format(url=url, page=page)
#html = pd.read_html(pg_url, header=0) #html = pd.read_html(pg_url, header=0)
html = pd.read_html(requests.get(pg_url, headers=self.header, timeout=5).text) html = pd.read_html(requests.get(pg_url, headers=self.header, timeout=30).text)
sleep(0.5) sleep(0.5)
count = 0 count = 0
@@ -603,7 +603,7 @@ class StockCrawler:
# 최근 상장 기업의 마지막 반복되는 페이지를 제외시킨다. # 최근 상장 기업의 마지막 반복되는 페이지를 제외시킨다.
pg_url = '{url}&page={page}'.format(url=url, page=page) pg_url = '{url}&page={page}'.format(url=url, page=page)
#html = pd.read_html(pg_url, header=0) #html = pd.read_html(pg_url, header=0)
html = pd.read_html(requests.get(pg_url, headers=self.header, timeout=5).text) html = pd.read_html(requests.get(pg_url, headers=self.header, timeout=30).text)
sleep(0.5) sleep(0.5)
count = 0 count = 0

View File

@@ -46,7 +46,7 @@ class MetaCrawler:
finish = False finish = False
for i in range(1, self.limit_page_count): for i in range(1, self.limit_page_count):
#html = pd.read_html(input['URL'] + '&page=%s' % i, header=0) #html = pd.read_html(input['URL'] + '&page=%s' % i, header=0)
html = pd.read_html(requests.get(input['URL'] + '&page=%s' % i, headers=self.header, timeout=5).text) html = pd.read_html(requests.get(input['URL'] + '&page=%s' % i, headers=self.header, timeout=30).text)
sleep(0.5) sleep(0.5)
# 마지막 페이지 까지 받기 # 마지막 페이지 까지 받기
@@ -126,7 +126,7 @@ class MetaCrawler:
finish = False finish = False
for i in range(1, self.limit_page_count): for i in range(1, self.limit_page_count):
#html = pd.read_html(url + str(i), header=0) #html = pd.read_html(url + str(i), header=0)
html = pd.read_html(requests.get(url + str(i), headers=self.header, timeout=5).text) html = pd.read_html(requests.get(url + str(i), headers=self.header, timeout=30).text)
sleep(0.5) sleep(0.5)
# 마지막 페이지 까지 받기 # 마지막 페이지 까지 받기
@@ -192,7 +192,7 @@ class MetaCrawler:
finish = False finish = False
for i in range(1, self.limit_page_count): for i in range(1, self.limit_page_count):
#html = pd.read_html(url + str(i), header=0, encoding='euc-kr') #html = pd.read_html(url + str(i), header=0, encoding='euc-kr')
html = pd.read_html(requests.get(url + str(i), headers=self.header, timeout=5).text, encoding='euc-kr') html = pd.read_html(requests.get(url + str(i), headers=self.header, timeout=30).text, encoding='euc-kr')
sleep(0.5) sleep(0.5)
# 마지막 페이지 까지 받기 # 마지막 페이지 까지 받기
@@ -267,7 +267,7 @@ class MetaCrawler:
finish = False finish = False
for i in range(1, self.limit_page_count): for i in range(1, self.limit_page_count):
#html = pd.read_html(input['URL'] + '&page=%s' % i, header=0) #html = pd.read_html(input['URL'] + '&page=%s' % i, header=0)
html = pd.read_html(requests.get(input['URL'] + '&page=%s' % i, headers=self.header, timeout=5).text) html = pd.read_html(requests.get(input['URL'] + '&page=%s' % i, headers=self.header, timeout=30).text)
sleep(0.5) sleep(0.5)
# 마지막 페이지 까지 받기 # 마지막 페이지 까지 받기

View File

@@ -75,7 +75,7 @@ class StockCrawler:
def getStockInfo(self): def getStockInfo(self):
#code_df = pd.read_html('http://kind.krx.co.kr/corpgeneral/corpList.do?method=download&searchType=13', header=0)[0] #code_df = pd.read_html('http://kind.krx.co.kr/corpgeneral/corpList.do?method=download&searchType=13', header=0)[0]
code_df = pd.read_html(requests.get('http://kind.krx.co.kr/corpgeneral/corpList.do?method=download&searchType=13', headers=self.header, timeout=5).text)[0] code_df = pd.read_html(requests.get('http://kind.krx.co.kr/corpgeneral/corpList.do?method=download&searchType=13', headers=self.header, timeout=30).text)[0]
# code_df = pd.read_excel('../resources/stock/상장법인목록.xls') # code_df = pd.read_excel('../resources/stock/상장법인목록.xls')
# 종목코드가 6자리이기 때문에 6자리를 맞춰주기 위해 설정해줌 # 종목코드가 6자리이기 때문에 6자리를 맞춰주기 위해 설정해줌
@@ -228,7 +228,7 @@ class StockCrawler:
# 최근 상장 기업의 마지막 반복되는 페이지를 제외시킨다. # 최근 상장 기업의 마지막 반복되는 페이지를 제외시킨다.
pg_url = '{url}&page={page}'.format(url=url, page=page) pg_url = '{url}&page={page}'.format(url=url, page=page)
#html = pd.read_html(pg_url, header=0) #html = pd.read_html(pg_url, header=0)
html = pd.read_html(requests.get(pg_url, headers=self.header, timeout=5).text) html = pd.read_html(requests.get(pg_url, headers=self.header, timeout=30).text)
sleep(0.5) sleep(0.5)
for date in html[0].날짜.values: for date in html[0].날짜.values: