ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 네이버 금융(차트)에서 주가 갈무리(크롤링)하기
    Python/파이썬과 주식 2019. 11. 5. 23:32
    반응형

    * 투자용으로 사용하지 마십시오. 

     

    네이버 금융에는 플래시를 이용한 차트 서비스가 있습니다. 

    https://finance.naver.com/item/fchart.nhn?code=005930

     

     

    크롬의 네트워크 모니터를 켜고 위 화면의 일봉을 클릭하면 다음 화면을 볼 수 있고...

    여기서 다음 주소를 찾을 수 있습니다. 

     

    https://fchart.stock.naver.com/sise.nhn?symbol=005930&timeframe=day&count=1500&requestType=0

     

    위 주소에 들어가 보면 XML형식의 삼성전자 일봉을 볼 수 있습니다. 

     

    카운트를 늘리니 최대 1990년 01월 03일 데이터까지 볼 수 있네요..

     

    그런데 1990년 1월부터 2월까지의 데이터가 좀 이상합니다. 

    4만원대군요.. 다른 데이터들과 비교를 해봅니다. 

    같은 페이지에서 삼성전자의 월봉을 확인하니

    3월 까지 보이고 이때 종가는 438원입니다. 

     

     

    이는 제공된 XML 데이터와 일치합니다. 

    <item data="19900331|435|440|430|438|111870"/>

     

    MSN의 삼성전자 주식 서비스와도 비교를 해봅니다. 

    https://www.msn.com/ko-kr/money/stockdetails/krx-005930/fi-ajn83m

     

    90년 2월까지의 데이터들은 잘못된 데이터인 것 같네요.

    지워줘야 할 것 같습니다. 

     

    이제 필요한 정보를 모두 수집했으니 코딩해 봅시다. 

     

    import urllib.request
    import xml.etree.ElementTree as ET
    
    count = '8000'
    code = '005930'
    url = f'https://fchart.stock.naver.com/sise.nhn?symbol={code}&timeframe=day&count={count}&requestType=0'
    
    r = urllib.request.urlopen(url)
    xml_data = r.read().decode('EUC-KR')
    root = ET.fromstring(xml_data)
    
    for index, each in enumerate(root.findall('.//item')):
        temp = each.attrib['data'].split('|')
        temp[1] = int(temp[1]) # 시가
        temp[2] = int(temp[2]) # 고가
        temp[3] = int(temp[3]) # 저가
        temp[4] = int(temp[4]) # 종가
        temp[5] = int(temp[5]) # 거래량
        if temp[0] >= "19900302":
            print(index, temp)
    반응형
Designed by Tistory.