스크래핑(Jsoup 라이브러리)
해당 사이트의 HTML 문서를 받아 해당 문서의 Contents를 원하는 데이터타입으로 Parsing후에 필요한 데이터를 추출하는 작업을 웹 스크래핑이라 한다.
주의사항
아무 사이트에서나 막 데이터를 가져와서 사용하면 안된다. 데이터는 회사의 자산이기 때문에 + 데이터의 용량이 과도하게 많을 경우 자신의 웹 서버 애플리케이션에 부하가 걸리게 된다.
Gradle 의존성
implementation 'org.jsoup:jsoup:1.16.1'
Spring Boot 3.x와 Java 17에서 사용하기에 적합합니다. jsoup은 HTML 파싱 및 웹 스크래핑을 위한 라이브러리로, 성능 및 호환성 면에서 자바 최신 버전과도 잘 동작합니다.
![[Pasted image 20240930194302.png]]
접근 가능한 데이터 보기 robots.txt
![[Pasted image 20240930212350.png]]
Disallow는 해당 경로의 접근을 허용하지 않는다이고, Allow는 해당 경로의 접근을 허용한다는 뜻이다.
스크래핑을 할 때에는 robots.txt에 정의된 규칙을 준수하고, 요청 서버에 무리가 가지 않는 선에서 요청을 해야한다.
try {
// Yahoo Finance 페이지에 연결
Connection connect = Jsoup.connect("https://finance.yahoo.com/quote/COKE/history/?frequency=1mo&period1=1569847757&period2=1727699440");
Document document = connect.get();
// 테이블과 tbody를 선택하고 바로 tr 순회
Element tbody = document.getElementsByTag("table").get(0).getElementsByTag("tbody").get(0);
// 각 행에 대해서 처리
for (Element row : tbody.getElementsByTag("tr")) {
String eleDate = row.getElementsByTag("td").get(0).text(); // 첫 번째 열 (날짜)
String dividendText = " "+row.getElementsByTag("td").get(1).text(); // 두 번째 열 (Dividend 정보)
String data = eleDate + dividendText;
if (!dividendText.contains("Dividend")) {
continue;
}
String[] split = data.split(" ");
String month = split[0];// month
int day = Integer.parseInt(split[1].replace(",", "")); // day
int year = Integer.parseInt(split[2]); // year
String dividend = split[3];
System.out.println(year + "/" + month + "/" + day + " -> " + dividend);
}
} catch (IOException e) {
throw new RuntimeException(e);
}
}
'프로젝트 이슈 및 몰랐던점 정리 > StockDividendAPI' 카테고리의 다른 글
[설정] 복합 유니크 키 설정 및 DB Index (0) | 2024.10.07 |
---|---|
[설정] 삽입하려는 데이터의 중복 키 발생 시 레코드 무시하고 삽입하는 방법 (0) | 2024.10.07 |
[설정] 백엔드 API Pageable 사용하기 (0) | 2024.10.07 |
[설정] 자동완성 검색 기능 Trie와 DB LIKE문 활용 (0) | 2024.10.07 |
[설정] 동적인 상태로 URL 매핑하는 방법 (0) | 2024.10.07 |