[일상] naver 주식 페이지에서 정보 가져오기

어제 본 시스템 트레이딩 전략 중에 적용할 만한 것을 발견했습니다. 코스닥 특성상 어제 오른 종목이 오늘도 오르면 종가도 오를 확률이 높다라는 전략인데요. 말이 됩니다. 백테스트 결과도 우상의 수익률을 보여준다고 하는군요.

그래서 이 로직은 개발해서 자동 매매해보기로 했습니다.

우선 어제 오른 종목을 찾아야하는데요. ebest api에는 이런 것은 없습니다. 전 종목에 대한 일봉 데이터를 가져오면 좋겠지만 시간이 너무 많이 걸릴 것 같습니다.

아시다시피 네이버 주식 페이지에서는 다양한 정보를 제공합니다. 이중 상승 종목을 보여주는 페이지가 있더군요.

제가 찾던 내용입니다.

이제 이 정보를 크롤링을 해서 파일에 저장한 후 사용을 하면 되겠죠. 오랜만에 크롤링을 해 봅니다.

특정 페이지를 크롤링을 하기 위해서는 크롬에서 개발자모드로 들어가서 해당 페이지의 html 구조를 파악해야 합니다. 다행히 이 페이지는 table 형태로 구성이 되어 있어서 크롤링하는데 문제가 없습니다.

오랜만에 사용하는 package라 구글링으로 사용법을 찾아보면서 코딩을 했습니다. urllib로 해당 페이지 내용을 읽어오고, BeautifulSoup으로 html 문서 파싱을 하면 됩니다.

화면에 보이는 그대로 html 문서가 구성되어 있기 때문에 중간에 공백도 있고 줄도 있습니다. 이런 부분들은 제거하고 주식 정보만 뽑는 코드는 다음과 같습니다. 그 결과는 날짜별로 이름을 붙여서 저장하는 것으로 마무리합니다.

장이 끝나면 이 프로그램 한번 돌려서 오늘 상승한 종목을 저장해 놓은 후 다음 날 장 시작하기전에 투자 검토 대상을 뽑은 후 조건을 만족하면 자동 매수를 하면 될 것 같습니다. 이 부분은 주말에 작업을 해야겠군요.

# -*- coding: utf-8 -*-
import time
import urllib.request
import json
from bs4 import BeautifulSoup

TODAY = time.strftime("%Y%m%d")

# 코스피
url1 = 'https://finance.naver.com/sise/sise_rise.nhn'
# 코스닥
url2 = 'https://finance.naver.com/sise/sise_rise.nhn?sosok=1'

up_list = {'kospi':url1, 'kosdaq':url2}


title_list = ['no', 'name', 'close', 'diff', 'per', 'qty', 'open', 'high', 'low', 'sichong', 'per', 'pbr']
for name, url in up_list.items() :
    with urllib.request.urlopen(url) as fs :
        soup = BeautifulSoup(fs.read().decode(fs.headers.get_content_charset()), 'html.parser')

    cnt = 1
    prices =[]
    # 각 데이터는 tr로 시작
    for tr in soup.find_all('tr') :
        # 각 항목은 td로 시작
        td_list = tr.find_all('td')
        try : 
            # 빈줄, 라인 등 데이터가 아닌 경우도 있다.
            # 다행히 n 값에 1부터 증가하는 값이 기록되어 있으므로, 이 값이 맞으면 정상적인 데이터로 판단
            if int(td_list[0].text.strip()) == cnt :
                info = {}
                # 총 12 항목에 대하여 set 구조체(info)에 옮긴다.
                for i in range(0,len(td_list)) :
                    data = td_list[i].text.strip()
                    info[title_list[i]] = data
                # 종목 하나 정보 완성 list에 추가
                prices.append(info)
                cnt+=1
        except :
            continue
    # 저장
    fname = TODAY+'_'+name+'_up_list.txt'
    save_to_file_json(fname, prices)
    print('done ', name)


Comments
Steemie currently dosen't allow you to make comments. If you want to write something, write it using another frontend (like Steemit)
Click there to view this post on Steemit.com