본문 바로가기
Project

[stock] Scrapping

by sangyunpark 2023. 9. 11.

스크래핑이란?

웹 스크래핑

(1) HTML 문서를 받은 후

(2) 문서를 파싱(Parsing)해서

(3) 필요한 데이터를 추출

 

아무런 데이터를 다 가져와도 되는가?

안된다!

(1) 데이터는 회사의 중요 자산

(2) 웹 서버의 부하 발생

 

스크래핑을 하는 경우

(1) robots.txt에 정의된 규칙을 준수하고

(2) 요청 서버에 무리가 가지 않는 선에서 요청하는 것

 

 

jsoup을 사용한 데이터 스크래핑하기

package com.example.stock;

import org.jsoup.Connection;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

import java.io.IOException;

@SpringBootApplication
public class StockApplication {
    public static void main(String[] args) {
        SpringApplication.run(StockApplication.class, args);

        try{
            // 데이터 가져오기
            Connection connection = Jsoup.connect("https://finance.yahoo.com/quote/KO/history?p=KO");
            Document document = connection.get();

            Elements eles = document.getElementsByAttributeValue("data-test","historical-prices");
            Element ele = eles.get(0);

            Element tbody = ele.children().get(1); // tbody 값 가져오기

            for(Element e :tbody.children()){
                String txt = e.text();
                if(!txt.endsWith("Dividend")){ // dividend로 끝나지 않는 문자열
                    continue;
                }

                String[] splits = txt.split(" ");
                String month = splits[0];
                int day = Integer.parseInt(splits[1].replace(",",""));
                int year = Integer.parseInt(splits[2]);
                String dividend = splits[3];

                System.out.println(year + "/" + month + "/" + day + " -> " + dividend);
            }

        }catch(IOException e){
            e.printStackTrace();
        }
    }

}

 

데이터를 스크래핑 한 후, 사용하기 좋게 데이터를 가공한다.

'Project' 카테고리의 다른 글

[stock] Entity 작성  (0) 2023.09.11
[stock] DB 설계  (0) 2023.09.11
[Weather Diary] API document 제작  (0) 2023.09.08
[Weather Diary] 예외처리  (0) 2023.09.08
[Weather Diary] Logger 남기기  (0) 2023.09.06