본문 바로가기
Programming/AI

파이썬으로 주식 데이터 크롤링 하기

by 제타 2018. 7. 29.
반응형


파이썬으로 주식(주가) 데이터를 얻는 방법입니다.

네이버 금융 페이지를 예로 들려고 하며 코드 035810은 이지바이오 회사의 코드 번호입니다.


파이썬으로 주식 예측 프로그램을 만드려면 먼저 주가 데이터가 있어야겠죠?


코드 설명을 드리면 네이버 금융 페이지에 접속하여 html을 분석 합니다.

그리고 일자, 종가, 시가, 고가, 저가, 거래량의 데이터를 가져옵니다.


저장된 데이터는 csv파일에 쓰도록 하겠습니다.


전체 코드 입니다.


import csv, codecs
import urllib
import datetime
import time
from urllib.request import urlopen
from bs4 import BeautifulSoup
import matplotlib.pyplot as plt

with codecs.open("ezfulldata.csv", "w", "euc_kr ") as fp:
writer = csv.writer(fp, delimiter=",", quotechar='"')
writer.writerow(["date", "final_price", "nomal_price"
, "high_price", "low_price", "trade_cnt"])

stockItem = '035810'

url = 'http://finance.naver.com/item/sise_day.nhn?code='+ stockItem

html = urlopen(url)
source = BeautifulSoup(html.read(), "html.parser")
maxPage=source.find_all("table",align="center")
mp = maxPage[0].find_all("td",class_="pgRR")
mpNum = int(mp[0].a.get('href')[-3:])
for page in range(1, 100):
url = 'http://finance.naver.com/item/sise_day.nhn?code=' + stockItem +'&page='+ str(page)
html = urlopen(url)
source = BeautifulSoup(html.read(), "html.parser")
srlists=source.find_all("tr")
isCheckNone = None

if((page % 1) == 0):
time.sleep(0.5)
for i in range(1,len(srlists)-1):
if(srlists[i].span != isCheckNone):
srlists[i].td.text
"""
print(srlists[i].find_all("td",align="center")[0].text
,srlists[i].find_all("td",class_="num")[0].text
,srlists[i].find_all("td",class_="num")[2].text
,srlists[i].find_all("td",class_="num")[3].text
,srlists[i].find_all("td",class_="num")[4].text
,srlists[i].find_all("td",class_="num")[5].text)
"""
print(
srlists[i].find_all("td",align="center")[0].text.replace(",","")
, srlists[i].find_all("td",class_="num")[0].text.replace(",","")
, srlists[i].find_all("td",class_="num")[2].text.replace(",","")
, srlists[i].find_all("td",class_="num")[3].text.replace(",","")
, srlists[i].find_all("td",class_="num")[4].text.replace(",","")
, srlists[i].find_all("td",class_="num")[5].ttext.replace(",",""))


with codecs.open("ezfulldata.csv", "a", "euc_kr ") as fp:
writer = csv.writer(fp, delimiter=",", quotechar='"')
writer.writerow([
srlists[i].find_all("td",align="center")[0].text.replace(",","")
, srlists[i].find_all("td",class_="num")[0].text.replace(",","")
, srlists[i].find_all("td",class_="num")[2].text.replace(",","")
, srlists[i].find_all("td",class_="num")[3].text.replace(",","")
, srlists[i].find_all("td",class_="num")[4].text.replace(",","")
, srlists[i].find_all("td",class_="num")[5].text.replace(",","")
])





반응형