플그래밍/파이써언

[파이썬] 16. 네이버 검색상위 종목 평단가 이격 실시간 확인

훗티v 2021. 5. 6. 21:45

 

실시간 평단가 이격 확인

네이버 금융에서 실시간으로 업데이트되는 검색 상위 종목을 기반으로

현재가 대비 당일 평단가의 이격을 실시간으로 추출해보자.

 

 

작업 순서

- 해당 웹사이트에 접속 후 종목명, 종목코드 추출

- 각 종목의 거래량 및 거래대금 추출 후 평단가 계산

- 현재가 대비 평단가의 이격 계산

- 루프 설정

- 특정 수치 이상의 이격 발생 시 색상 입히기

 

 

파이썬 코드

from bs4 import BeautifulSoup
import requests

class bcolors:
    CHECK = "\033[32m"
    ENDC = "\033[0m"
    BOLD = "\033[1m"
    UNDERLINE = "\033[4m"

while True:
    sess = requests.Session()
    adapter = requests.adapters.HTTPAdapter(pool_connections=100, pool_maxsize=100)
    sess.mount('http://', adapter)

    headers = {
        "User-Agent": 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.149 Safari/537.36 OPR/67.0.3575.115'}

    URL = f'https://finance.naver.com/sise/lastsearch2.nhn'

    page = sess.get(URL, headers=headers)
    soup = BeautifulSoup(page.content, 'html.parser', from_encoding="utf8")
    stocks = soup.findAll('a', class_='tltle')

    popular_stocks = []

    for stock in stocks:
        link = stock.attrs['href']
        popular_stocks.append(link[-6:])

    # popular_stocks = popular_stocks[:1]

    for item in popular_stocks:

        headers = {
        "User-Agent": 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.149 Safari/537.36 OPR/67.0.3575.115'}

        URL = f'https://finance.naver.com/item/main.nhn?code={item}'

        page = sess.get(URL, headers=headers)
        soup = BeautifulSoup(page.content, 'html.parser', from_encoding="utf8")
        company = soup.find('div', class_='wrap_company').find_next().find_next().text
        current = int(soup.find('p', class_='no_today').find_next().find_next().text.replace(',',''))
        volume = soup.find('span', class_='sptxt sp_txt9').find_next().find_next()
        amount = soup.find('span', class_='sptxt sp_txt10').find_next().find_next()
        snoopy = int(amount.text.replace(',',''))/int(volume.text.replace(',',''))*1000000
        upward = (round(((current/snoopy)-1)*100, 2))

        if int(upward) > 3:
            print(f'{company} > 현재가: {current} 평단가 대비: {bcolors.BOLD}{bcolors.CHECK}{upward}%{bcolors.ENDC}{bcolors.ENDC}')
        else:
            print(f'{company} > 현재가: {current} 평단가 대비:{upward}%')

        

 

 

실행 화면

특정 수준 이상의 이격 발생 시 색상을 입힐 수 있다.

장 중 검색 상위 종목을 실시간으로 확인 가능하다.

 

 

 

 

 

 

728x90