-
[파이썬 크롤링, ETF 자산배분투자] 실시간 주가 확인 네이버 vs 다음 [2]자산배분 투자 2020. 3. 28. 09:00
파이썬 크롤링으로 네이버와 다음에서 실시간 주가를 확인하려고 한다.
12개 ETF 관심종목에 대해 2개의 포털 크롤링 속도를 비교하였다.
네이버(naver)에서 크롤링을 수행한 결과, 41.4초가 걸렸다.
그렇다면 다음(daum)에서는?소스 코드(ipynb)는 맨 아래에 있다.
In [1]:import pandas as pd from pandas import Series, DataFrame from datetime import datetime, timedelta import matplotlib.pyplot as plt import requests import re from bs4 import BeautifulSoup import time import json
기초자료 파일¶
종목명
,종목코드
를 포함한 정보가 들어 있다.
In [2]:기초자료 = '기초자료.xlsx' pd.read_excel(기초자료)
Out[2]:In [3]:url_다음 = 'http://finance.daum.net/api/charts/A{}/days?limit=5&adjusted=true' headers = { 'Accept': 'application/json, text/plain, */*', 'Accept-Encoding': 'gzip, deflate', 'Accept-Language': 'ko-KR,ko;q=0.9,en-US;q=0.8,en;q=0.7', 'Connection': 'keep-alive', 'Cookie': 'GS_font_Name_no=0; GS_font_size=16; _ga=GA1.3.937989519.1493034297; webid=bb619e03ecbf4672b8d38a3fcedc3f8c; _ga=GA1.2.937989519.1493034297; _gid=GA1.2.215330840.1541556419; KAKAO_STOCK_RECENT=[%22A069500%22]; recentMenus=[{%22destination%22:%22chart%22%2C%22title%22:%22%EC%B0%A8%ED%8A%B8%22}%2C{%22destination%22:%22current%22%2C%22title%22:%22%ED%98%84%EC%9E%AC%EA%B0%80%22}]; TIARA=C-Tax5zAJ3L1CwQFDxYNxe-9yt4xuvAcw3IjfDg6hlCbJ_KXLZZhwEPhrMuSc5Rv1oty5obaYZzBQS5Du9ne5x7XZds-vHVF; webid_sync=1541565778037; _gat_gtag_UA_128578811_1=1; _dfs=VFlXMkVwUGJENlVvc1B3V2NaV1pFdHhpNTVZdnRZTWFZQWZwTzBPYWRxMFNVL3VrODRLY1VlbXI0dHhBZlJzcE03SS9Vblh0U2p2L2V2b3hQbU5mNlE9PS0tcGI2aXQrZ21qY0hFbzJ0S1hkaEhrZz09--6eba3111e6ac36d893bbc58439d2a3e0304c7cf3', 'Host': 'finance.daum.net', 'If-None-Match': 'W/"23501689faaaf24452ece4a039a904fd"', 'Referer': 'http://finance.daum.net/quotes/', 'User-Agent':'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.77 Safari/537.36' }
In [4]:def get_bs(종목코드): """ 종목코드를 입력받아 bs를 출력 """ url = url_다음.format(종목코드) result = requests.get(url, headers=headers) bs = BeautifulSoup(result.content, "html.parser") return bs
In [5]:def 현재가_조회_개별(종목코드): """ 종목코드 1개를 입력받아 현재가와 조회시간을 출력 """ bs = get_bs(종목코드) df = json.loads(bs.text) df = DataFrame(df['data']) df = df[['date', 'tradePrice', 'openingPrice', 'highPrice', 'lowPrice', 'tradeTime']] df['date'] = df['date'].map(lambda x: datetime.strptime(x, '%Y-%m-%d')) df['tradeTime'] = df['tradeTime'].map(lambda x: datetime.strptime(x, '%H%M%S').time()) df.rename(columns={ 'date': '거래일', 'tradePrice': '현재가', 'openingPrice': '시가', 'highPrice': '고가', 'lowPrice': '저가', 'tradeTime': '거래시간', }, inplace=True) df.거래일 = df.apply(lambda x: datetime.combine(x['거래일'], x['거래시간']), axis=1) df.drop('거래시간', axis=1, inplace=True) return (df.loc[df.index.max(), '현재가'], df.loc[df.index.max(), '거래일'])
In [6]:def 현재가_조회_목록(기초자료): """ 종목코드 다수(xls)를 입력받아 현재가와 조회시간을 출력 """ 종목 = pd.read_excel(기초자료, sheet_name='종목') 종목['임시'] = 종목['종목코드'].map(현재가_조회_개별) 종목['현재가'] = 종목['임시'].map(lambda x: x[0]) 종목['조회시간'] = 종목['임시'].map(lambda x: x[1]) 종목.drop('임시', axis=1, inplace=True) return 종목
코드 실행 결과¶
- 다음:
1.16초
- 네이버:
45.9초
In [7]:start = time.time() 현재가 = 현재가_조회_목록('기초자료.xlsx') print('포털 다음에서 {}개의 종목을 조회하는데 {}초가 걸렸습니다.'.format(len(현재가), round(time.time() - start, 2))) 현재가
Out[7]:반응형'자산배분 투자' 카테고리의 다른 글
Maxims for sustainable investment in stock market (0) 2020.04.01 ETF 자산배분투자 매매량 계산 파이썬 코드 (0) 2020.03.30 [파이썬 크롤링, ETF 자산배분투자] 실시간 주가 확인 네이버 vs 다음 [1] (0) 2020.03.27 은행 예금으로만 노후준비를 하면 안되는 이유 (0) 2020.03.24 당신의 노후는 안녕한가? (0) 2020.03.08