range 함수로 루프를 많이 사용한다.

 

 

하지만 len 함수를 사용해야하고 모양도 이쁘지 않기 때문에 enumerate함수를 사용하면 보다 깔끔하게 사용가능하다.

 

 

enumerate함수는 첫번째 리턴으로 인덱스 값을 두번째 리턴으로 값을 리턴한다.

enumerate 리턴값을 보면 아래와 같다.

뭐 빅데이터 책으로 공부하다가 데이터도 긁어올겸 python으로 현재 네이버 주식 시가총액창에 있는 데이터를 긁어오는 코드를 짜봤다.

이 데이터가 필요한지는 잘 모르겠지만 간만에 python으로 소스를 짜보았다.

#-*- coding:utf-8 -*-
import requests
import pandas as pd
from bs4 import BeautifulSoup
import datetime

def make_data(tag):
    for i in range(0,len(tag)):
        ttag = tag[i].find_all('td')
        title.append(ttag[1].text)
        now.append(ttag[2].text)
        try:
            updown = (ttag[3].find('img')['alt'])
            if updown == "상승":
                updown = "+"
            else:
                updown = "-"
        except :
            updown = "변동없음"
        yest_rate.append(str(updown)+ttag[3].text.strip())
        fluct_rate.append(ttag[4].text.strip())
        face_value.append(ttag[5].text)
        foreign.append(ttag[8].text)
        volume.append(ttag[9].text)
        per.append(ttag[10].text)
        roe.append(ttag[11].text)    

def get_tag(i):
    req = requests.get("https://finance.naver.com/sise/sise_market_sum.nhn?sosok=0&page={}".format(i))
    html = req.text
    bs = BeautifulSoup(html,'html.parser')
    tag = bs.find('tbody').find_all('tr', {'onmouseover':'mouseOver(this)'})
    return tag

time_now = []
now_time = datetime.datetime.now()
time_ = now_time.strftime('%Y-%m-%d %H:%M:%S')
time_now.append(time_)
title = [] #종목
now = [] #현재가
yest_rate = [] #전일비
fluct_rate = [] #등락률
face_value = [] #액면가
volume = [] #거래량
foreign = [] #외국인비율
per = [] #PER
roe = [] #ROE


for i in range(1,33):
    tag = get_tag(i)
    make_data(tag)

df = pd.DataFrame(title)
df1 = pd.DataFrame(now)
df2 = pd.DataFrame(yest_rate)
df3 = pd.DataFrame(fluct_rate)
df4 = pd.DataFrame(face_value)
df5 = pd.DataFrame(volume)
df6 = pd.DataFrame(foreign)
df7 = pd.DataFrame(per)
df8 = pd.DataFrame(roe)
df9 = pd.DataFrame(time_now)

res = pd.concat([df,df1,df2,df3,df4,df5,df6,df7,df8,df9],axis=1)
res.columns = ['종목','현재가','전일비','등락률','액면가','거래량','외국인비율','PER','ROE','시간']
res.to_excel('{}.xlsx'.format(time_))

일단 이거 돌리면 현재 네이버에 떠있는 주식 종목, 현재가, 전일비, 등락률, 액면가, 거래량, 외국인비율, per, roe 정보를 가져오고 시간도 기록해준다.

이 정보들을 긁어와주는데 사람들이 무슨 하나하나 긁는거 같아서 만들어 보았다.
필요한 모듈은 requests, pandas, bs4, datetime인것 같다.

결과는 아래와 같이 나온다. 

찾아보니 매일 주식 정보를 기록하시는 분들이 사용하시면 좋을 것 같다.

+ Recent posts