첫 번째 - 네이버 금융을 몽땅 가져오기에 앞서서...
Jsoup 설치 방법 (자세히)
https://uno-kim.tistory.com/213
[JAVA]Jsoup 라이브러리를 이용한 크롤링 - Jsoup 사용법 + 라이브러리 저장하는 법
안녕하세요~! ㅎㅎ 오늘 포스팅은 그동안 크롤링를 하여 네이버 금융의 정보를 가져왔었는데 크게 사용되었던 라이브러리인 Jsoup 라이브러리 사용법 에 대해서 알아보겠습니다! 1. 라이브러리
uno-kim.tistory.com
Jsoup 사용방법(3가지 방법 소개)
https://uno-kim.tistory.com/215
[JAVA]Jsoup 라이브러리를 이용한 크롤링 - Jsoup 사용법
안녕하세요! 오늘 포스팅은 Jsoup 라이브러리를 알아보려고 해요 해당 라이브러리는 가장 편한 API 를 제공하며 HTML5 DOM 메서드와 CSS 선택기를 사용하여, URL을 가져오고 데이터를 추출 및 조작하기
uno-kim.tistory.com
안녕하세요~! 오랜만에 포스팅입니다. ㅎㅎㅎ
지난 포스팅에서는
https://uno-kim.tistory.com/199
네이버 금융페이지를 몽땅 가져와보자! - 자바 크롤링(java)_1
안녕하세요! 개인프로젝트의 일부분 중 하나인 크롤링에 대해서 공부해보겠습니다! 그리고 대상은 지금이제 처음 공부를 시작하셨거나 자바 초급수준이신 분들을 위한 난이도로 설명하겠습니
uno-kim.tistory.com
코스닥 코스피 종목을 어떤것을 가져올 것인가. 그리고 간단하게 설명을 진행했었습니다 ㅎㅎ
크롤링에 앞서 현재 우리가 어떤 정보를 가져올것인가를 정하고 접근하는 것은 좋지만,
어떻게 가져올 것인가?
한번은 고민 해야할 것같습니다. 엄밀히 말하지만 해당 정보를 어떻게 가져올 것인가. 가 옳은 말일 수 있겠습니다.
네이버 금융 사이트를 통째로 배껴왔다고 하더라도 해당 모습만 나오면 의미가 없다고 판단했습니다.
그래서 가져온 데이터를 한번더 가공할 수 있도록 설계를 해보았습니다.

대한민국 굴지의 1위 기업 '삼성전자'를 한번 보겠습니다.
20년 코로나 쇼크일때 4만 3천원까지 떨어졌던 삼성전자가 많이 올랐군요.
https://finance.naver.com/item/main.naver?code=005930
삼성전자의 Url 입니다.
https://finance.naver.com/item/main.naver?code=005930
<!-- 네이버 금융 | (1)| 메인화면 | get방식의 종목코드-->
위의 패턴으로 이루어져있으며
https://finance.naver.com/item/main.naver?code=000660
https://finance.naver.com/item/main.naver?code=035420
위 처럼 code=뒤의 부분만 변경되는 것을 알 수 있습니다.
이 종목코드를 통해 네이버 종목의 세부 정보를 얻을 수 있는것입니다.
즉, 내가 삼성전자를 검색했을때 DB에서 삼성전자와 매핑된 코드(005930)을 가져와 Url을 셋팅해 주면 검색이된다.
이렇게 세부 정보를 가져올 수 있게됩니다.
따라서 종목코드를 관리할 테이블과 해당 데이터를 테이블에 넣어주어야 합니다.
해당 정보를 얻을 수 있는
한국거래소 정보시스템 사이트로 가겠습니다.
http://data.krx.co.kr/contents/MDC/MDI/mdiLoader/index.cmd?menuId=MDC0201020201
KRX 정보데이터시스템
증권·파생상품의 시장정보(Marketdata), 공매도정보, 투자분석정보(SMILE) 등 한국거래소의 정보데이터를 통합하여 제공 서비스
data.krx.co.kr

해당 버튼을 눌러 엑셀파일을 다운로드 받아주겠습니다.

오늘자로 다운로드가 완료된 것을 알 수 있습니다.

그럼 해당 엑셀 화면을 볼 수 있습니다.
여기서 필요한건 단축코드와 한글 종목약명 쯤이 됩니다. 반드시 한글종목약명을 사용하셔야 합니다.
나머지 컬럼들은 본인들의 입맛에 맛게 넣어주셔도됩니다. 하지만 저는 시장구분까지
총 3개의 컬럼만 사용하겠습니다.
그리고 이 엑셀을 오라클 또는 본인이 사용하는 db에 넣어주어야 합니다.
엑셀을 임포트 하는 기능이 있다면 쉽게 하실 수 있습니다. 저의경우 오라클로 진행하겠습니다.


데이터 임포트

구롬 보시는 바와 같이 나옵니다. <다음> 버튼을 눌러줍시다.
그리고 또다음을 눌러주시면

해당 화면을 마주하게됩니다. 저는 시장구분(코스피, 코스닥)/단축코드/한글종목약명 을 가져오도록 하겠습니다.


그리고 원하는 대상 테이블 열을 매핑 시켜줍니다.
여기서 중요한 것은 데이터를 보실때 단축코드의 경우
숫자형식으로 009520 의경우 9520 이렇게 나오는 경우가 있습니다.
이때는 엑셀파일의 종목코드를 숫자형식이 아니고 문자열로 수정하시고 새로 저장하시어 이용하시면 되겠습니다.

데이터 임포트가 실행되었다면 확인을 해줍니다 .
저의 경우 포스코가 포스코 홀딩스로 이름이 바뀌어 수정이 필요했어서 이번 기회에 업데이트를 해주었습니다.
이제 서버단에서 이 정보를 정상적으로 불러올 수 있는지 확인을 해줍니다.
최초 페이지가 로드될때 입력받는 매개변수 없으 모든 정보를 가져오기에 간단한 쿼리문을 작성해줍니다.

저의 경우 financeVO에 객체들을 저장하도록 합니다.
package com.aPlatform.controller.service.finance.VO;
import lombok.Data;
@Data
public class FinanceVO
{
private String fin_code;
private String fin_name;
private String fin_exchange;
}

그리고 해당 코드를 가져오는 서비스를 만들어줍니다.
@GetMapping(value = "/codeAllMap")
public Map<String, String> getCodeMap(Model model) throws Exception
{
return financeRetvBOC.getCodeMap();
}
겟방식으로 해당 url을 받으면 겟코드맵을 가져옵니다.
저의경우 {"삼성전자":"종목코드"}
이렇게 맵형식으로 받고싶어서 만들었습니다.

현재는 모델을 사용하지 않습니다.
public Map<String, String> getCodeMap()
{
Map<String, String> outMap = new HashMap<>();
List<FinanceVO> inList = financeDataMapper.getAllCode();
for (int i = 0; i < inList.size(); i++)
{
outMap.put(inList.get(i).getFin_name(), inList.get(i).getFin_code());
}
return outMap;
}

위처럼 financeDataMapper의 쿼리문을 돌려 서 종목이름과 코드를 매핑하여 outMap에 넣어줍니다.

그리고 해당 api를 실행하면 위와 같은 결과를 얻을 수 있습니다.
현재의 포스팅은 크롤링하는 내용은 없지만 크롤링만 해서 데이터를 뽑아서 다루것보다는
그것을 응용하는 것을 목표로 두기 위함으로 크롤링과 관계없지만
앞으로의 과제들을 수행하기 위한 테이블을 생성하고 기반이 될 데이터를 저장하는 포스팅이었습니다.
다음 포스팅부터 영역부분을 알차게 가져와서 파싱하는 방법에 대해 알아보겠습니다.
'프로젝트 > 금융' 카테고리의 다른 글
네이버 금융 크롤링 : 주식 종목 가져오기 (4) | 2022.10.26 |
---|---|
네이버 금융 크롤링 : 환율 금리 유가 차트 이미지를 가져와 보자! (0) | 2022.10.25 |
네이버 금융 크롤링 : 다른 정보들도 모조리 긁어와보자! (0) | 2022.10.24 |
네이버 금융페이지를 몽땅 가져와보자! - 코스피, 코스닥을 긁어오자! (0) | 2022.05.03 |
네이버 금융페이지를 몽땅 가져와보자! - 자바 크롤링(java)_1 (0) | 2022.03.17 |
댓글