FinanceDataReader
FinanceDataReader 사용자 안내서
FinanceDataReader 사용자 안내서
financedata.github.io
pandas datareader를 보완한 파이썬 패키지. 여기엔 종목코드를 가져오는 기능이 있어서 사용했다
정말 손쉽게 코스피, 코스닥, 뉴욕거래소, 나스닥 종목 전체를 가져올 수 있다.
코스피의 경우 이렇게 데이터를 받았다.
{
"Symbol": "095570",
"Market": "KOSPI",
"Name": "AJ\ub124\ud2b8\uc6cd\uc2a4",
"Sector": "\uc0b0\uc5c5\uc6a9 \uae30\uacc4 \ubc0f \uc7a5\ube44 \uc784\ub300\uc5c5",
"Industry": "\ub80c\ud0c8(\ud30c\ub81b\ud2b8, OA\uc7a5\ube44, \uac74\uc124\uc7a5\ube44)",
"ListingDate": 1440115200000,
"SettleMonth": "12\uc6d4",
"Representative": "\uc774\ud604\uc6b0",
"HomePage": "http://www.ajnet.co.kr",
"Region": "\uc11c\uc6b8\ud2b9\ubcc4\uc2dc"
}
symbol, name 빼고는 필요없는 내용이라 삭제하고 유니코드화 된 건 json.dump에 ensure_ascii=False 옵션을 주니 해결됨. 파이썬은 참 어려운것 같다.
대충 이렇게 파싱이 됨. 이 파일은 주가 크롤링에 심볼 참조할 때도 쓰고 앱의 프론트엔드단에 넣어서 리스트 불러오는데도 쓸 것임.
코인쪽은 몇개 안되니 그냥 손으로 입력해야겠다.
다음은 각각의 개별 주식들 과거 주가정보를 가져와서 db에 저장하자.
db 연결하기
from pymongo import MongoClient
client = MongoClient('localhost', 27017)
db = client['stock_app']
collection = db['stock']
stock 콜렉션 하나에 모든 데이터를 때려박을 생각이다.
파이썬의 몽고디비는 node에서 쓸때와 다르게 스키마를 미리 설정하지 않아도 입력이 되었다.
with open('./List/KOSPI.json') as json_file:
KOSPI = json.load(json_file)
with open('./List/KOSDAQ.json') as json_file:
KOSDAQ = json.load(json_file)
with open('./List/NYSE.json') as json_file:
NYSE = json.load(json_file)
with open('./List/NASDAQ.json') as json_file:
NASDAQ = json.load(json_file)
for market in [KOSPI, KOSDAQ, NYSE, NASDAQ]:
for stock in market:
try:
symbol = stock['symbol']
if(stock['market'] == 'KOSPI'):
symbol += '.KS'
if(stock['market'] == 'KOSDAQ'):
symbol += '.KQ'
print(stock['name'], '/', stock['symbol'], '/', symbol)
df = pdr.DataReader(symbol, 'yahoo', '1900-01-01')
parsed = json.loads(df.to_json(orient="index"))
for ms in parsed:
date = datetime.fromtimestamp(int(ms)/1000)
exist = collection.find_one(
{'symbol': stock['symbol'], 'date': date})
if not exist:
collection.insert_one({'symbol': stock['symbol'], 'date': date,
'close': parsed[ms]['Close'], 'AdjClose': parsed[ms]['Adj Close']})
except:
print('error : ', stock['name'])
continue
미리 저장해둔 주식 종목들을 순회하면서 개별 주식 주가를 db에 저장했다.

아직 진행중인데 이렇게 저장이된다. 이게 속도가 상당히 느려서 이거 다 가져오려면 하루 종일 걸릴 것 같다.
내 컴퓨터로 다 하긴 무리고, 프로덕트할때 쓸 벌쳐 서버에다 코드 올려서 데이터 크롤링하게 해둬야겠다.
=> vultr 서버에 크롤링 돌려놓고 자러갔는데 100개도 못하고 cpu 100프로 찍히고 멈춰있더라구요
그냥 도큐먼트 하나당 종목하나로 하고 주가 정보는 객체 속성에다 다 넣는걸로 수정했습니다.
'프로젝트' 카테고리의 다른 글
주식 적립식 투자앱 만들기 - 6 (0) | 2020.11.29 |
---|---|
주식 적립식 투자앱 만들기 - 5 (0) | 2020.11.26 |
주식 적립식 투자앱 만들기 - 3 (0) | 2020.11.20 |
주식 적립식 투자앱 만들기 - 2 (0) | 2020.11.19 |
주식 적립식 투자앱 만들기 - 1 (0) | 2020.11.17 |