Spring Boot Jsoup을 통한 웹 크롤링

웹 크롤링이란?

웹 크롤링은 웹 사이트에서 정보를 수집하고 추출하는 자동화된 프로세스를 의미합니다.

웹 크롤링은 일반적으로 웹 사이트의 robots.txt 파일을 준수하고, 무분별한 크롤링이나 스크래핑이 웹 서버에 부하를 일으키지 않도록 주의해야 합니다. 또한, 웹 사이트의 이용 약관을 준수해야 하며, 합법적인 목적으로만 사용해야 합니다. 크롤링을 할 때는 데이터 소유자의 권리를 존중하고 윤리적인 사용을 지키는 것이 중요합니다.

 

Jsoup

Jsoup은 HTML 파싱 및 조작을 위한 자바 라이브러리로, 웹 크롤링 작업에서 많이 사용됩니다. Jsoup을 통해 HTML 문서에서 원하는 정보를 추출할 수 있습니다.

 

Jsoup 라이브러리 추가

dependencies {
    implementation 'org.jsoup:jsoup:1.14.3' // 최신 버전 확인 후 사용
}

 

문법

웹 페이지에서 HTML 가져오기

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import java.io.IOException;

public class WebCrawler {

    public static void main(String[] args) {
        try {
            // 웹 페이지에서 HTML 문서 가져오기
            String url = "https://example.com";
            Document document = Jsoup.connect(url).get();
            
            // document를 이용하여 원하는 작업 수행 ...
            
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

 

CSS Selector를 사용하여 요소 선택

// 웹 페이지에서 모든 링크 추출
Elements links = document.select("a[href]");
for (Element link : links) {
    System.out.println("Link: " + link.attr("href"));
}

 

요소의 텍스트 가져오기

// 웹 페이지에서 제목 추출
Element titleElement = document.select("title").first();
String title = titleElement.text();
System.out.println("Title: " + title);

 

특정 속성 값 가져오기

// 이미지 태그의 src 속성 값 추출
Elements images = document.select("img");
for (Element image : images) {
    String src = image.attr("src");
    System.out.println("Image Source: " + src);
}

 

특정 클래스를 가진 요소 선택하기

// 클래스가 "exampleClass"인 모든 div 요소 선택
Elements divs = document.select("div.exampleClass");
for (Element div : divs) {
    System.out.println("Div Content: " + div.text());
}

 

부모 및 자식 요소 선택하기

// 특정 div의 직계 자식으로 있는 p 태그 선택
Element specificDiv = document.select("div#specificDivId").first();
Elements paragraphs = specificDiv.select("> p");
for (Element paragraph : paragraphs) {
    System.out.println("Paragraph: " + paragraph.text());
}

 

HTML 소스코드 문자열로 가져오기

// HTML 소스코드 문자열로 가져오기
String htmlSource = document.html();
System.out.println("HTML Source: " + htmlSource);

 

여러 페이지 크롤링 가능

// 여러 페이지 크롤링 예제
for (int i = 1; i <= 3; i++) {
    String pageUrl = "https://example.com/page" + i;
    Document pageDocument = Jsoup.connect(pageUrl).get();
    
    //...
}