Python/파이썬과 주식, 코인

네이버 금융에서 ETF 기초 정보 갈무리(크롤링)하는 법

컴닥 2020. 11. 1. 19:12
반응형

퀀트를 하는 건 아니지만..
ETF 포트폴리오를 여러가지로 백테스트하다보니까..
ETF 수수료가 궁금해졌습니다. 

453개의 ETF 하나하나 조사하기는 힘듭니다. 
파이썬의 힘을 좀 빌려야겠네요. 

먼저 저도 가물가물해진 ETF 목록 크롤링하는 법을 보고 옵니다.
comdoc.tistory.com/entry/네이버-주식을-이용해-ETF-목록-갈무리하는-법

다음으론 목표를 확인합니다. 
finance.naver.com/item/main.nhn?code=069500

이제 열심히 코딩합니다. 

import csv
import json
import urllib.request
from bs4 import BeautifulSoup

url = 'https://finance.naver.com/api/sise/etfItemList.nhn'
raw_data = urllib.request.urlopen(url).read().decode('CP949')
json_data = json.loads(raw_data)

f = open('output.csv', 'w', encoding='utf-8', newline='')
wr = csv.writer(f)

for each in json_data['result']['etfItemList']:
    url = 'https://finance.naver.com/item/main.nhn?code=' + each['itemcode']
    raw_data = urllib.request.urlopen(url).read().decode('CP949')
    soup = BeautifulSoup(raw_data)
    info1 = soup.body.find('table', summary="시가총액 정보").find_all('em')
    info2 = soup.body.find('table', summary="기초지수 정보").find_all('td')
    info3 = soup.body.find('table', summary="펀드보수 정보").find_all('td')
    info_all = [
        each['itemname'],
        each['itemcode'],
        info1[0].get_text(strip=True).replace('\t', '').replace('\n', '') + '억원',
        info1[1].get_text(),
        info2[0].get_text(),
        info2[1].get_text(),
        info2[2].get_text(),
        info3[0].get_text(),
        info3[1].get_text()
    ]
    print(info_all)
    wr.writerow(info_all)
f.close()

저는 구글의 스프레드시트와 CSV 포맷을 즐겨씁니다.
엑셀을 별로 안 좋아해서..  

결과 CSV를 첨부합니다. 
국내 453개의 ETF 이름, 코드, 시가총액, 상장주식수, 기초지수, 유형, 상장일, 펀드보수, 운용사를 정리했습니다. 

output.csv
0.07MB

구글 스프레드시트에서 열어보면 잘 보일 겁니다. 

CSV 파일은 텍스트 에디터로 읽을 수도 있습니다. 

만약 엑셀로 보고 싶으시다면, 
텍스트 에디터를 이용해서 유니코드(UTF-8)를 ANSI(또는 EUC-KR, CP949)로 변환 후 저장하면 됩니다. 

저는 notepad++를 사용합니다.

반응형