ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [파이썬 크롤링, ETF 자산배분투자] 실시간 주가 확인 네이버 vs 다음 [1]
    자산배분 투자 2020. 3. 27. 07:26

    파이썬 크롤링으로 네이버와 다음에서 실시간 주가를 확인하려고 한다.

    12개 ETF 관심종목에 대해 2개의 포털 크롤링 속도를 비교하였다.

     

    소스 코드는 맨 아래에 있다.

     

     

     

    네이버

    1. 코드 출처: JW's Blog
    2. 데이터 출처: 네이버 금융
      • URL: 'https://finance.naver.com/item/main.nhn?code=' + 종목코드
    3. 적용: 이 코드의 결과물은 아래와 같은 경우에 종목별 매수량을 결정할 때 사용한다.
      • 추가금액을 투입할 때(매월1회)
      • 포트폴리오를 리밸런싱할 때
    4. 기초자료
      • 실시간으로 주가를 확인하고자 하는 관심종목 목록
        • 파일: 기초자료.xlsx 파일의 관심종목 시트
        • 관심종목 시트 항목: 종목명, 종목코드, 자산구분 등
    In [1]:
    import pandas as pd
    from pandas import Series, DataFrame
    from datetime import datetime, timedelta
    import requests
    import re
    from bs4 import BeautifulSoup
    import time
    
     

    기초자료 파일

    • 종목명, 종목코드를 포함한 정보가 들어 있다.
    In [2]:
    기초자료 = '기초자료.xlsx'
    pd.read_excel(기초자료)
    
    Out[2]:
      구분 종목명 종목코드 총보수비용비율 퇴직연금 개인연금 ISA
    0 선진국주식 TIGER 미국다우존스30 245340 0.0043 True False False
    1 신흥국주식 ARIRANG 신흥국MSCI(합성 H) 195980 0.0056 True True True
    2 한국국채 KOSEF 국고채10년 148070 0.0018 True True False
    3 현금성자산 TIGER 단기통안채 157450 0.0011 True True True
    4 선진국주식 KODEX 미국S&P500선물(H) 219480 0.0032 False True True
    5 선진국주식 TIGER 미국S&P500선물(H) 143850 0.0036 False True True
    6 대체투자 KODEX 골드선물(H) 132030 0.0075 False True True
    7 대체투자 TIGER 골드선물(H) 319640 0.0045 False True True
    8 한국국채 KOSEF 국고채10년레버리지 167860 0.0033 False False True
    9 해외국채 TIGER 미국채10년선물 305080 0.0037 False True True
    10 해외국채 KODEX 미국채10년선물 308620 0.0037 False True True
    11 현금성자산 KODEX 단기채권 153130 0.0017 False True True
    In [3]:
    url_네이버 = 'https://finance.naver.com/item/main.nhn?code='
    
    In [4]:
    def get_bs(종목코드):
        """
        종목코드를 입력받아 bs를 출력
        """
        url = url_네이버 + str(종목코드)
        result = requests.get(url)
        bs = BeautifulSoup(result.content, "html.parser")
        return bs
    
    In [5]:
    def 현재가_조회_개별(종목코드):
        """
        종목코드 1개를 입력받아 현재가와 조회시간을 출력
        """
        bs = get_bs(종목코드)
        오늘정보 = bs.find('p', {'class': 'no_today'})
        현재가 = 오늘정보.find('span', {'class': 'blind'}).text
        현재가 = int(현재가.replace(',', ''))
        조회시간 = bs.find('em', {'class': 'date'}).text
        조회시간 = re.sub(r'[^\d\.\s:]', '', 조회시간).strip()
        조회시간 = re.sub(r'\s+', ' ', 조회시간)
        if ':' in 조회시간: #장중이면: 2020.03.27  15:24 기준(장중)
            조회시간 = datetime.strptime(조회시간, '%Y.%m.%d %H:%M')
        else:
            조회시간 = datetime.strptime(조회시간, '%Y.%m.%d')
        return (현재가, 조회시간)
    
    In [6]:
    def 현재가_조회_목록(기초자료):
        """
        종목코드 다수(xls)를 입력받아 현재가와 조회일을 출력
        """
        종목 = pd.read_excel(기초자료, sheet_name='종목')
        종목['임시'] = 종목['종목코드'].map(lambda x: 현재가_조회_개별(x))
        종목['현재가'] = 종목['임시'].map(lambda x: x[0])
        종목['조회일'] = 종목['임시'].map(lambda x: x[1])
        종목.drop('임시', axis=1, inplace=True)
        return 종목
    
     

    코드 실행 결과

    • 생각보다 시간이 오래(41.4초) 걸렸다.
    In [7]:
    start = time.time()
    현재가 = 현재가_조회_목록(기초자료)
    end = time.time()
    print('네이버에서 {}개의 종목을 조회하는데 {}초가 걸렸습니다.'.format(len(현재가), round(end - start, 1)))
    현재가
    
     
    네이버에서 12개의 종목을 조회하는데 41.4초가 걸렸습니다.
    
    Out[7]:
      구분 종목명 종목코드 총보수비용비율 퇴직연금 개인연금 ISA 현재가 조회일
    0 선진국주식 TIGER 미국다우존스30 245340 0.0043 True False False 13615 2020-03-27
    1 신흥국주식 ARIRANG 신흥국MSCI(합성 H) 195980 0.0056 True True True 8515 2020-03-27
    2 한국국채 KOSEF 국고채10년 148070 0.0018 True True False 125120 2020-03-27
    3 현금성자산 TIGER 단기통안채 157450 0.0011 True True True 100360 2020-03-27
    4 선진국주식 KODEX 미국S&P500선물(H) 219480 0.0032 False True True 12420 2020-03-27
    5 선진국주식 TIGER 미국S&P500선물(H) 143850 0.0036 False True True 30285 2020-03-27
    6 대체투자 KODEX 골드선물(H) 132030 0.0075 False True True 11675 2020-03-27
    7 대체투자 TIGER 골드선물(H) 319640 0.0045 False True True 12450 2020-03-27
    8 한국국채 KOSEF 국고채10년레버리지 167860 0.0033 False False True 138385 2020-03-27
    9 해외국채 TIGER 미국채10년선물 305080 0.0037 False True True 12750 2020-03-27
    10 해외국채 KODEX 미국채10년선물 308620 0.0037 False True True 12425 2020-03-27
    11 현금성자산 KODEX 단기채권 153130 0.0017 False True True 102095 2020-03-27

     

    `다음`에서 크롤링한 데이터는 "다음" 포스팅에서 확인해 보자.

    기초자료.xlsx
    0.01MB
    현재가_조회_네이버.ipynb
    0.02MB
    반응형
Designed by Tistory.