Javascript

[Javascript] 웹페이지 크롤링 및 엑셀로 출력하기(주식 5분 간격 데이터)

루아흐뉴마 2020. 9. 19. 23:24
반응형

S Y N O P S I S #주식 데이터 크롤링하기

  • 대상 페이지 데이터가 JSON 구조여서 엑셀로 작업하기에는 까다로워
  • 자바스크립트로 구현해보았다. 자바스크립트에 익숙하지 않아 기록용으로 남겨둔다.
  • 여기서 예제로 사용된 데이터는 Investing.com의 주식시장 데이터이다.
  • 코드를 실행하면 스크립트 파일이 있는 폴더에 엑셀 파일이 생성된다.
  • 스크립트 실행을 위해 코드 두서에 제시한 라이브러리 설치가 요구된다.


실행 결과






JS Code



// npm install xmlhttprequest
// npm install xlsx

// time unit
// 1min = 60sec
// 1hour = 60min = 3600sec
// 1d = 24hour = 86400sec
// 여기서 시간은 로컬시간을 의미

let tickers = {
    KOSPI: 37426, //코스피지수
    DJI: 169, //다우지수
    DJI_CFD: 8873, //다우 선물
    SNP500: 166, //S&P 500 지수
    SNP500_CFD: 8839 //S&P 500 선물
}

let timeScale = 30 //30분봉 5, 10, 30, 60 등등 타임스케일 적용
let tickerSel = tickers.KOSPI;    //ticker 선택
let startDate = (+new Date('2020.07.01 00:00')/1000).toFixed(0);  //날짜 형식을 UNIX 형식으로 변경
let endDate = (+new Date('2020.07.02 00:00')/1000).toFixed(0);  //UNIX 시간을 사용자가 입력하기 어렵기 때문

let requestUrl = 'https://tvc4.forexpros.com/ccb6e54a79f21bee67e783bc0e410e78/1599318253/18/18/88/history?' +
                 'symbol=' + tickerSel + 
                 '&resolution=' + timeScale +
                 '&from=' + startDate + 
                 '&to=' + endDate;
                 
let XMLHttpRequest = require('xmlhttprequest').XMLHttpRequest;
let rquest = new XMLHttpRequest();
rquest.open('GET', requestUrl, false);
rquest.responseType = 'json';
rquest.send();
let strBody = rquest.responseText;
let parsedBody = JSON.parse(strBody);

let ar_t = new Array(parsedBody.t); //타임스탬프
let ar_o = new Array(parsedBody.o); //시가
let ar_c = new Array(parsedBody.c); //종가

// UNIX 타임스탬프를 UTC 표기법으로 일괄변경
let ar_t_UTC = ar_t[0].map((t) => new Date(t * 1000));

let xlApp = require('xlsx');
let wb = xlApp.utils.book_new();  //새 워크북 생성
wb.SheetNames.push("test"); //'test' 워크시트 생성
let ws = xlApp.utils.aoa_to_sheet([ar_t_UTC]);  //워크시트에 타임스탬프 최초 출력
xlApp.utils.sheet_add_aoa(ws, ar_c, {origin: -1});  //최초 출력 이후 이어서 출력(여기서는 종가만)
wb.Sheets['test'] = ws;
let wbout = xlApp.writeFile(wb, './invest.xlsx');   //엑셀파일로 출력



 Copyright (2020) Ruahneuma. All Rights Reserved.


반응형