Knowledge Map

네이버 파이낸스에서 etf 코드 가져오기 본문

경제 & 투자

네이버 파이낸스에서 etf 코드 가져오기

2016. 6. 3. 19:56

추가 : 구글링만 해도 쉽게 나온다.

http://comp.wisereport.co.kr/ETF/lookup.aspx

나처럼 고생하지말자 ㅋㅋㅋㅋ...




네이버 파이낸스랑 한국거래소 홈페이지, 야후 파이낸스에 국내 ETF 코드를 한눈에 보여주는 곳이 없어서 간단히 만들어봤다.


한국거래소 홈페이지 -> ETF 엑셀파일 -> [ 파이썬에 로드 -> 네이버 파이낸스 URL에 검색 -> 결과값 파싱 -> 파이썬 출력 ]


총 211개의 국내 ETF가 존재했는데 다행히 25개를 제외한 나머지는 잘 출력되었다. 걔네들은 결과값이 1개 이상이라서 바로 코드를 보여주는게 아니라서 어쩔수 없이 수동으로 채워넣었다만 나머지 185개는 잘 나왔으니 그냥저냥 넘어가기로 했다.


ETF코드는 엑셀 파일로 간단히 기록했으니 이걸 참고하면 된다.


Etf_Code.xlsx

2016-06-04 : 구글 파이낸스에서는 etf 코드 검색시에 "KRX:" 이것을 안 붙이면 동일한 다른 코드가 검색되곤 한다. 해당 부분 수정해서 다시 올렸음.



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
# -*- coding: utf-8 -*-
"""
아나콘다에 google finance 설치하는 코드. 메모삼아 적어놓았다.
install : conda install -c https://conda.anaconda.org/hargup/channel/pypi googlefinance
Even if there would be be no conda package, mixing conda and pip installations is fine. 
conda "knows" about the pip-installed packages.
"""
import requests
import xlrd
import xlsxwriter
from bs4 import BeautifulSoup
import urllib
import time
 
# 테스트용 코드 : 참조한 코드이다.
def get_sector(code):
    # url = 'http://finance.naver.com/search/search.nhn?query=ARIRANG+200'
    url = 'http://finance.naver.com/item/main.nhn?code='+ code
    r = requests.get(url)
    soup = BeautifulSoup(r.text)
    
    sector = ""
    h4 = soup.find('h4', {'class':'h_sub sub_tit7'})
    if h4 is not None:
        # h4의 h_sub sub_tit7라는 클래스의 내용을 전부 저장
        # 그중에서 a태그의 텍스트를 가져오도록 함.
        sector = h4.a.text
    return sector
    
# print get_sector('005930')
    
# etf 코드 가져옴
def get_etfcode(text_code):
    url = 'http://finance.naver.com/search/search.nhn?query='+text_code
    r = requests.get(url) 
    soup = BeautifulSoup(r.text)
 
 
    # bs로 가져온 값을 형변환을 거치면서 원하는 값을 찾아서 리턴
    etfcode = ""
    span = str(list(soup.find_all('script',))[-1])    
    start_point = span.find("code=")
    eftcode =  span[start_point+5 : span.find("'",start_point)]
    return eftcode
    
#print get_etfcode()
 
# 인코딩 변환 (네이버 파이낸스는 값을 EUC-KR로 인코딩해서 보낸다.)
def change_subject(text):
    return urllib.quote(text.encode('EUC-KR'), '/:')
 
 
# 아래 것은 테스트 해봄
url = u'ARIRANG 코스피'
# print change_subject(url)
 
def read_excel():
    # 엑셀 읽기 위함
    wb = xlrd.open_workbook("D:\_ABC\kospiData\Etf_Name.xlsx")
    ws = wb.sheet_by_index(0)
    
    # 엑셀에 값추가
    w_wb = xlsxwriter.Workbook("D:\_ABC\kospiData\Etf_Name.xlsx")
    w_ws = w_wb.add_worksheet()
    
    ncol = ws.ncols
    nrow = ws.nrows
      
    # 엑셀에 저장된 ETF이름을 for문을 이용, 인코딩, 검색 & 파싱 후 출력
    for i in range(nrow):
        test = get_etfcode(change_subject(ws.row_values(i)[1]))
        w_ws.write(i,2,test)
        print ws.row_values(i)[1],"==>",test
        # 굳이 없어도 잘 돌아가긴 하는데 찜찜해서 추가한 0.1초 딜레이    
        time.sleep(0.1)
 
read_excel()
cs


Comments