스크래핑이란?
웹 스크래핑
(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 |