yahooニュース 産経新聞、首相「腹を割って意見交換」 7、8日に訪韓し尹大統領と会談 岸田文雄首相は1日(日本時間2日)、7~8日の日程で韓国を訪問し、尹錫悦(ユン・ソンニョル)大統領と会談する方向で調整(ちょうせい)していると明らかにした。訪問先(ほうもんさき)のガーナで記者団の取材に答えた。首相は尹氏が3月に来日(らいにち)した際(さい)、首脳同士が相互(そうご)に訪問する「シャトル外交」の再開(さいかい)で合意(ごうい)しており、その第1弾(いちだん)となる。 続いて、日本政府は4月28日に韓国を輸出手続き簡略化などの優遇措置の対象国となる「グループA(旧ホワイト国)」に再指定(さいしてい)する方針を発表したが、首相の訪韓(ほうかん)で成果(せいか)を示(しめ)せるかが焦点(しょうてん)になると書いていました。 日韓関係が改善されているようでうれしい記事でした。
인터넷 웹이나 SNS 같은 소셜 네트워크 등 온라인에서 공개되어 있는 데이터를 수집하는 기술을 웹 크롤링이라고 한다. 전문업체들이 개발하는 경우가 대부분이나, 개인이 프로그램을 만들어서 사용하는 경우도 있다. 웹 문서에서 원하는 데이터를 추출할 수 있으며, 이를 위해서는 기본적인 HTML문서의 구조를 알아야 한다.
네이버 주가 데이터 크롤링
주가 데이터 크롤링을 위해 다음과 같이 필요 모듈을 import한다.
from urllib.request import * from bs4 import * import requests import re import pandas as pd import matplotlib.pyplot as plt import numpy as np
함수 inputCompany()는 회사의 입력을 받고 종가 추출을 위한 재귀함수를 호출한다.
def inputCompanyAndDays(): Company = input('원하는 회사의 종목코드를 입력하세요 :') extractLastPrice(Company) return
out[1] 원하는 회사의 종목코드를 입력하세요 :005930
함수 extractLastPrice()는 인자로 Company를 입력받고 종가추출을 위한 페이지 넘버 PN을 계산하여 크롤링을 하는 실질적인 프로그램이다. 크롤링된 주가데이터는 변수 pList에 저장된다.
def extractLastPrice(Company): pList = [] DN = int(input("종가 추출 기간을 입력하세요(20의 배수가 되도록 상향 조정합니다) : ")) if DN / 20 == 1 : PN = int(DN/20) - 1 else : PN = int((DN + 20)//20) - 1 for k in range(PN) : req = Request('http://finance.naver.com/item/frgn.nhn?code={}&page={}'.format(Company, k+1)) req.add_header('User-Agent', 'Mozilla/5.0') wp = urlopen(req) soup = BeautifulSoup(wp, 'html.parser') trList = soup.find_all('tr', {'onmouseover' : 'mouseOver(this)'}) for j in trList : tdList = j.find_all('td') pList.append(tdList[1]) pList.reverse() for k in range(len(pList)) : pList[k] = pList[k].get_text() pList[k] = int(re.sub(r'[^0-9]','',pList[k])) drawGraph(pList) return pList
out[2] 종가 추출 기간을 입력하세요(20의 배수가 되도록 상향 조정합니다) : 100
함수 drawGraph()는 인자로 pList를 입력받고 Visualization을 이행하는 함수이다.
def drawGraph(pList): graph = pd.Series(pList, index=range(len(pList))) plt.style.use('seaborn') plt.plot(graph, label = 'stock price') plt.legend(loc = 'upper left') plt.xlabel('Days') plt.ylabel('Price') plt.grid(True) plt.show() return
Visualization
삼성전자의 최근 100일간 주가데이터를 불러와 그래프로 시각화하였다. 일일 주가데이터의 수치 데이터를 보고 싶다면 pList를 출력하면 된다.
댓글
댓글 쓰기