IT/python

파이썬 크롤링 활용 네이버증권 시가총액 100위까지 52주 최고가 대비 현재가격의 비율 구하기

나의지식 2021. 9. 14. 15:23
import requests
from bs4 import BeautifulSoup

f = open("sc.csv", 'w')
f.write("시총순위,종목명,가격,최고점 대비 가격 비율\n")

mp=1

def fin(a):
    url='https://finance.naver.com/item/main.nhn?code='+str(a)
    
    res=requests.get(url)
    a=res.text

    tp=a.find("52주 최고")
    tm=a.find("52주 최고가")
    ta=a.find("52주 최고점")

    if tp==-1 or tm>-1 or ta>-1:
        global mp
        poe=a.find('52주최고')
        t=a[poe:poe+200]
        soup=BeautifulSoup(t,'html.parser')
        max52=int((soup.em.string).replace(',',''))
    
        poe=a.find('현재가')
        t=a[poe:poe+20].split(' ')
        ppt=t[1]
        pvalue=int(t[1].replace(',',''))

        poe=a.find('<dd>종목명')
        t=a[poe:poe+50].split(' ')
        y=t[1].split('</dd>')
        tt=y[0]

        print(tt+" : "+str(ppt)+"원 ("+str(int(pvalue/max52*100))+"%)")
        f.write(str(mp)+","+tt+","+str(pvalue)+","+str(int(pvalue/max52*100))+"\n")
        mp=mp+1
        

    if tp>-1 and tm==-1 and ta==-1:
        poe=a.find('최저 :' )
        t=a[poe:poe+400]
        soup=BeautifulSoup(t,'html.parser')
        max52=int((soup.em.string).replace(',',''))

        poe=a.find('현재가')
        t=a[poe:poe+20].split(' ')
        ppt=t[1]
        pvalue=int(t[1].replace(',',''))

        poe=a.find('<dd>종목명')
        t=a[poe:poe+50].split(' ')
        y=t[1].split('</dd>')
        tt=y[0]

        print(tt+" : "+str(ppt)+"원 ("+str(int(pvalue/max52*100))+"%)")
        f.write(str(mp)+","+tt+","+str(pvalue)+","+str(int(pvalue/max52*100))+"\n")
        mp=mp+1
        
ul="https://finance.naver.com/sise/sise_market_sum.nhn"
url="https://finance.naver.com/sise/sise_market_sum.nhn?&page=2"

res=requests.get(ul)
a=res.text

res=requests.get(url)
a=a+res.text

idx=0

while idx > -1 :
    idx=a.find('main.naver?code=',idx)
    if idx > -1 :

        idx += len('main.naver?code=')
        t=a[idx:idx+40]
        
        code=(t[0:6])

        fin(code)
        
f.close()

 

삼성전자 : 76,800원 (79%)
SK하이닉스 : 107,500원 (71%)
NAVER : 403,000원 (86%)
삼성바이오로직스 : 913,000원 (87%)
..

와 같은 식으로 출력되고 sc.csv파일을 열어보면 csv파일로도 내용을 확인할 수 있다.

  • 지난번에 만들었던 fin함수를 개선했다.  
  • 원 소스가 자주 바뀌는 만큼 이 소스도 자주 바꿔줘야 한다.

 

반응형