레이블이 웹크롤링인 게시물을 표시합니다. 모든 게시물 표시
레이블이 웹크롤링인 게시물을 표시합니다. 모든 게시물 표시

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백만

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

2021년 2월 28일 일요일

파이썬에서 특정 인터넷 사이트 페이지 내용을 가져오는 방법 (웹크롤링)

 

파이썬은 여러가지 패키지들이 있어 개발자가 구현하기 원하는 기능들을 쉽게 구현해줄 수 있도록 해줍니다.

 

아래 소스는 특정 인터넷 사이트의 url의 페이지 내용을 가져올 수 있도록 해줍니다.

 

import requests

from bs4 import BeautifulSoup

 

# 가져오기 원하는 url 주소

url = "https://www.naver.com"

 

response = requests.get (url)

 

if response.status_code == 200:   # 에러가 발생되지 않으면

    html = response.text

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

    print (soup)

 

위에서 “requests.get”이나 “BeuatifulSoup”requests 패키지와 beuatifulsoup4 패키지에서 지원되는 함수로서 파이썬에 설치가 되어 있어야 사용할 수 있는데, 만약 설치가 되어 있지 않다면

 

pip install requests

pip install bueatifulsoup4

 

위의 명령을 명령 프롬프트 창에서 실행시키면 설치가 됩니다.

 

위의 코드를 실행시키면 Naver 홈페이지의 내용이 출력이 됩니다.

 

아시다시피 Naver 홈페이지 내용은 엄청난 양의 html 페이지로 일일이 보여드릴 수가 없네요.

 

beuatifulsoup4 패키지는 다양한 함수를 이용해서 가져온 html 페이지 내용을 처리할 수 있도록 해줍니다.

 

"print (soup)" 대신 "print (soup.title)"을 실행시키면 가져온 페이지의 title 부분만 추출해서 보여줄 수 있습니다.

 

D:\MyPyWork\sample1>python test1.py

<title>NAVER</title>

 

"print (soup)" 대신 "print (soup.title.string)"을 실행시키면 html title 태그를 뺀 내용만 보여줄 수 있습니다.

 

D:\MyPyWork\sample1>python test1.py

NAVER

 

"print (soup)" 대신 "print (soup.p)"을 실행시키면 html p 태그 부분만 추출하여 보여줄 수 있습니다.

 

D:\MyPyWork\sample1>python test1.py

<p class="dsc">선거 후보자에 대해 자동완성을 제공하지 않습니다.

<span class="dsc_inner">기간 : 4 2 0 ~ 4 15 18시까지</span>

<a class="link" href="#">자세히보기</a>

</p>

 

현재 보여준 것은 BeuatifulSoup 패키지로 할 수 있는 일부분만 보여준 것입니다.