레이블이 주가정보보기인 게시물을 표시합니다. 모든 게시물 표시
레이블이 주가정보보기인 게시물을 표시합니다. 모든 게시물 표시

2021년 3월 22일 월요일

[파이썬] 주가정보을 조회하기 코드에서 주식종목 수정기능 및 런타임 오류처리 추가

 

이전에 포스팅한 주가정보 조회하기 코드에서 만약 주식종목코드가 잘못되었을 경우에는 오류가 발생할 수 있습니다.

 

오류가 발생하면 실행되던 코드가 오류를 디스플레이하면서 멈추게 되는데, 이러면 짜증이 날 듯 합니다.

 

그래서 오류가 발생시에 코드를 멈추지 않고 오류발생을 알려주면서 오류가 발생된 주식종목을 삭제하거나 수정할 수 있게 코드를 좀더 보완했습니다.

 

import requests

from bs4 import BeautifulSoup

 

stock_list = []   # 관심종목 목록

stock_item = ["", ""]   # 추가할 관심종목 입력

sel = ""

st_no = ""

st_name = ""   # 관심종목 이름 입력

st_code = ""   # 관심족옥 코드 입력

 

url = ""

url_temp = "https://finance.naver.com/item/main.nhn?code="

 

while True:

    print ("==========")

print ("96 : 관심종목 추가")   # 주식종목 추가

    print ("97 : 관심종목 수정")   # 주식종목 수정

    print ("98 : 관심종목 삭제")   # 주식종목 삭제

print ("99 : 종료")

    print ("종목코드 번호 : 선택한 종목 주가정보 조회")

    print ("==========")

 

    i = 0

    for i in range ( len(stock_list) ):

        print (i, " - ", stock_list[i][0], stock_list[i][1])

        i = i + 1

 

    print ("==========")

 

    sel = input ("원하는 항목을 입력하세요 : ")

    sel_no = int(sel)

 

    if sel == "96":   # 새로운 주식종목 추가

        st_name = input ("종목이름 : ")

        st_code = input ("종목코드 : ")

        stock_item[0] = st_name

        stock_item[1] = st_code

        stock_list.append(list(stock_item))

 

elif sel == "97":

        st_no = input ("종목항목번호 : ")

        st_name = input ("종목이름 : ")

        st_code = input ("종목코드 : ")

        stock_item[0] = st_name

        stock_item[1] = st_code

        stock_list.copy(list(stock_item))   # 수정한 종목코드를 목록에 복사

 

    elif sel == "98":   # 지정된 주식종목 삭제

        st_no = input ("종목항목번호 : ")

        del stock_list[ int(st_no) ]

 

    elif sel == "99":   # 종료

        break

 

    else:   # 선택한 주식종목 주가정보 보여주기

        url = url_temp + stock_list[sel_no][1]

 

        response = requests.get (url)

 

        if response.status_code == 200:

            html = response.text

            soup = BeautifulSoup (html, 'html.parser')

print ("----------")

 

            try:   # 오류발생을 처리

                print (soup.dl.text)

            except:

                print ("주식종목코드 오류")

 

            print ("----------")

 

아래와 같이 삼성전자를 예를 들어 보면 종목코드를 잘못 입력했습니다.

 

원하는 항목을 입력하세요 : 96

종목이름 : samsung

종목코드 : 111

==========

96 : 관심종목 추가

97 : 관심종목 수정

98 : 관심종목 삭제

99 : 종료

종목코드 번호 : 선택한 종목 주가정보 조회

==========

 

만약 삼성전자 주가정보를 조회하면 에러가 발생됩니다 (AttributeError).

 

런타임 에러가 발생되면 바로 에러표시를 하면서 코드가 멈추게 되는데, 오류처리를 하여 발생한 오류표시를 하고 계속 코드는 동작합니다.

 

원하는 항목을 입력하세요 : 0

----------

주식종목코드 오류

----------

==========

 

그러면 삼성전자 종목코드를 수정하면 아래와 같이 수정됨을 알 수 있습니다.

 

원하는 항목을 입력하세요 : 97

종목항목번호 : 0

종목이름 : 삼성전자

종목코드 : 005930

==========

96 : 관심종목 추가

97 : 관심종목 수정

98 : 관심종목 삭제

99 : 종료

종목코드 번호 : 선택한 종목 주가정보 조회

==========

0  -  삼성전자 005930

==========

 

이제 런타임 오류도 문제없이 처리하고 잘못된 종목코드도 수정할 수 있게 되었습니다.

 

2021년 3월 19일 금요일

[파이썬] 관심주식종목 목록에 종목 추가/삭제가능 및 선택한 주가정보을 조회하기 (네이버 증권 사이트 이용)

 

이번에는 파이썬을 이용하여 특정 주식종목 목록을 입력할 수 있고 또 목록에서 주식종목 삭제도 할 수 있게 새롭게 코드를 작성했습니다.

 

지난번에는 일일이 주식종목 코드를 코드상에 직접 입력하다보니 새로운 주식종목을 조회하기 위해서는 엄청 불편합니다.

 

import requests

from bs4 import BeautifulSoup

 

stock_list = []   # 관심종목 목록

stock_item = ["", ""]   # 추가할 관심종목 입력

sel = ""

st_no = ""

st_name = ""   # 관심종목 이름 입력

st_code = ""   # 관심족옥 코드 입력

 

url = ""

url_temp = "https://finance.naver.com/item/main.nhn?code="

 

while True:

    print ("==========")

    print ("97 : 관심종목 추가")

    print ("98 : 관심종목 삭제")

    print ("99 : 종료")

    print ("종목코드 번호 : 선택한 종목 주가정보 조회")

    print ("==========")

 

    i = 0

    for i in range ( len(stock_list) ):

        print (i, " - ", stock_list[i][0], stock_list[i][1])

        i = i + 1

 

    print ("==========")

 

    sel = input ("원하는 항목을 입력하세요 : ")

    sel_no = int(sel)

 

    if sel == "97":   # 새로운 주식종목 추가

        st_name = input ("종목이름 : ")

        st_code = input ("종목코드 : ")

        stock_item[0] = st_name

        stock_item[1] = st_code

        stock_list.append(list(stock_item))

 

    elif sel == "98":   # 지정된 주식종목 삭제

        st_no = input ("종목항목번호 : ")

        del stock_list[ int(st_no) ]

 

    elif sel == "99":   # 종료

        break

 

    else:   # 선택한 주식종목 주가정보 보여주기

        url = url_temp + stock_list[sel_no][1]

 

        response = requests.get (url)

 

        if response.status_code == 200:

            html = response.text

            soup = BeautifulSoup (html, 'html.parser')

            print ("----------")

            print (soup.dl.text)

            print ("----------")

 

여기에 작성한 코드는 파이썬에서 기본적인 키워드를 주로 사용하여 작성하였으므로 보기에 어렵지 않을 것입니다.

 

처음 실행하면 등록된 관심종목이 없으므로 아래와 같이 나올 것입니다.

 

==========

98 : 관심종목 추가

99 : 종료

종목코드 번호 : 선택한 종목 주가정보 조회

==========

==========

원하는 항목을 입력하세요 :

 

여기서 종목추가를 위해 “97”을 입력하고, 추가할 종목이름과 코드를 입력합니다.

 

그러면 아래와 같이 화면이 나오는데, 예제로 네이버를 입력해보았습니다.

 

원하는 항목을 입력하세요 : 97

종목이름 : 네이버

종목코드 : 035420

==========

97 : 관심종목 추가

98 : 관심종목 삭제

99 : 종료

종목코드 번호 : 선택한 종목 주가정보 조회

==========

0  -  네이버 035420

==========

 

다시 추가로 삼성전자현대차를 입력해보겠습니다.

 

==========

0  -  네이버 035420

1  -  삼성전자 005930

2  -  현대차 005380

==========

 

여기에서 삼성전자를 삭제하면 아래 그림과 같이 나옵니다.

 

원하는 항목을 입력하세요 : 98

종목항목번호 : 1

==========

97 : 관심종목 추가

98 : 관심종목 삭제

99 : 종료

종목코드 번호 : 선택한 종목 주가정보 조회

==========

0  -  네이버 035420

1  -  현대차 005380

==========

 

어디서든 해당 종목에 대한 목록번호를 입력하면 해당 종목의 주가정보를 볼 수 있습니다.

 

2021년 3월 1일 월요일

[파이썬] 네이버 증권 사이트에서 특정 종목 주가 보기

파이썬을 이용하여 특정 웹사이트 페이지 내용을 가져올 수 있는 코드는 지난번에 포스팅을 했습니다.

보통의 웹사이트는 많은 내용들이 포함되어 있어 단순히 웹사이트 페이지 가져오기만으로는 필요한 내용을 보기가 힘듭니다.

그래서 이번에는 요즘 많은 관심을 가지고 있는 주식의 주가를 쉽게 볼 수 있는 코드를 만들어 보기로 했습니다.

실시간으로 볼려면 한국거래소 등에서 제공하는 API를 사용한다고 하지만, 실제로 일반 개인에게는 개방을 하지 않는거 같습니다.

그래서 누구나 쉽게 접근할 수 있는 네이버 증권 사이트를 이용하기로 했습니다. 아시다시피 일반 포털에서 제공하는 정보는 실시간으로 주가 정보를 제공하지는 않지만, 증권사 페이지에 로그인하지 않으면서 참고로 주가를 알아보는데는 지장이 없을거 같습니다.

아래는 실제 네이버 증권 사이트에서 "삼성전자" 종목명을 조회하면 나오는 화면입니다.



주가를 알아내려면 이 화면의 실제 페이지 내용이 필요한데, 브라우저의 "페이지 소스보기" 메뉴를 사용하면 됩니다.

페이지 내용을 보면 많은 태그를 포함하는 html 내용이 나오는데, 그중에서 종목명에 대한 주가 정보는 아래와 같이 찾을 수 있습니다.

<dl class="blind">
    <dt>종목 시세 정보</dt>
    <dd>2021년 02월 26일 16시 11분 기준 장마감</dd>
    <dd>종목명 삼성전자</dd>
    <dd>종목코드 005930 코스피</dd>
    <dd>현재가 82,500 전일대비 하락 2,800 마이너스 3.28 퍼센트</dd>
    <dd>전일가 85,300</dd>
    <dd>시가 82,800</dd>
    <dd>고가 83,400</dd>
    <dd>상한가 110,500</dd>
    <dd>저가 82,000</dd>
    <dd>하한가 59,800</dd>
    <dd>거래량 36,715,024</dd>
    <dd>거래대금 3,026,814백만</dd>
</dl>

우리가 필요한건 dl 태그내의 내용입니다.

그래서 아래와 같이 코드를 작성해보았습니다. 여기서 "005930"은 삼성전자 종목코드인데, 다른 종목을 조회하려면 그에 맞는 종목코드로 바꾸면 됩니다.

import requests
from bs4 import BeautifulSoup

url = "https://finance.naver.com/item/main.nhn?code=005930"   #삼성전자 종목코드를 포함하는 url

response = requests.get (url)

if response.status_code == 200:
    html = response.text
    soup = BeautifulSoup (html, 'html.parser')
    print (soup.dl.text)   #태그내의 텍스트를 추출하여 출력


이 코드를 실행시키면 아래와 같이 텍스트만 추출해서 깨끗하게 출력이 됩니다.

D:\MyPyWork>python stock1.py

종목 시세 정보
2021년 02월 26일 16시 11분 기준 장마감
종목명 삼성전자
종목코드 005930 코스피
현재가 82,500 전일대비 하락 2,800 마이너스 3.28 퍼센트
전일가 85,300
시가 82,800
고가 83,400
상한가 110,500
저가 82,000
하한가 59,800
거래량 36,715,024
거래대금 3,026,814백만

물론 여기서 좀더 가공하면 더 보기좋게 할 수도 있겠습니다.