본문 바로가기
Skills/Spring

[Jsoup이란/Jsoup 자바로 구현해보기]

by Hoseok 2023. 2. 8.
728x90
반응형

Jsoup이란 html 문서로 저장된 데이터를 Parsing해주는 오픈 소스 라이브러리입니다.

 

jsoup 공식 문서 보기

https://jsoup.org/

 

jsoup: Java HTML parser, built for HTML editing, cleaning, scraping, and XSS safety

jsoup: Java HTML Parser jsoup is a Java library for working with real-world HTML. It provides a very convenient API for fetching URLs and extracting and manipulating data, using the best of HTML5 DOM methods and CSS selectors. jsoup implements the WHATWG H

jsoup.org

 

다운로드

https://jsoup.org/download

 

Download and install jsoup

Download and install jsoup jsoup is available as a downloadable .jar java library. The current release version is 1.15.3. What's new See the 1.15.3 release announcement for the latest changes, or the changelog for the full history. Previous releases of jso

jsoup.org

 

build.gradle에 넣어주기만 해도 build가 됩니다.

 


 

Jsoup 자바로 구현해보기

우선, img src를 인식하는지 간단히 테스트해보겠습니다.

import org.junit.jupiter.api.Test;

public class HtmlParseTest {
    
    @Test
    public void parse_test1() {
    	boolean isImg = html.contains("img src");
        if (isImg) {
            System.out.println("사진있음");
            // 파싱 시작
        } else {
            System.out.println("사진없음");
            result = "a.png";
        }
	}
}

콘솔에 출력된다.

 

그 다음은 indexOf로 img가 몇 번째 index인지 검사해보겠습니다.

import org.junit.jupiter.api.Test;

public class HtmlParseTest {
    @Test
    public void parse_test1() {
        // given
        String result = "";
        String html = "<p>1</p><p><img src=\"data:image/png;base64,iVBORwGKG\"></p>";

        // when
        int site = html.indexOf("img");
        System.out.println(site);
        // then
    }
}

 

콘솔로 확인 가능

 

indexOf와 substring으로 열심히 파싱해본 결과...

import org.junit.jupiter.api.Test;

public class HtmlParseTest {
    @Test
    public void parse_test1() {
        // given
        String result = "";
        String html = "<p>1</p><p><img src=\"data:image/png;base64,iVBORwGKG\"></p>";

        // when
        int b1 = html.indexOf("img");
        System.out.println(b1);

        String s1 = html.substring(b1);
        System.out.println(s1);

        int b2 = s1.indexOf("src");
        String s2 = s1.substring(b2);
        System.out.println(s2);

        int b3 = s2.indexOf("\"");
        int b4 = s2.lastIndexOf("\"");
        System.out.println(b3);
        System.out.println(b4);

        result = s2.substring(b3 + 1, b4);
        System.out.println(result);
        // then
    }
}

이렇게, src url까지 파싱할 수 있었습니다.

 

그리고 보기 깔끔하게 Method로 정리하면,

import org.junit.jupiter.api.Test;

public class HtmlParseTest {

    @Test
    public void parse_test1(){
        String html = "<p>1</p><p><img src=\"data:image/png;base64,iVBORw0KG\"></p>";
        String tag = parseEL(html, "img");
        System.out.println(tag);
        String attr = parseAttr(tag, "src");
        System.out.println(attr);
    }

    private String parseEL(String html, String tag){
        String s1 = html.substring(html.indexOf(tag)-1);
        return s1.substring(0, s1.indexOf(">")+1);
    }
    private String parseAttr(String el, String attr){
        String s1 = el.substring(el.indexOf(attr));

        int begin = s1.indexOf("\"");
        int end = s1.lastIndexOf("\"");

        return s1.substring(begin+1, end);
    }


}

각각의 책임을 가진 Method로 분리해서 Jsoup을 java로 맛보기로 구현해볼 수 있었습니다.

 

 

결론 : 그냥 Jsoup 씁시다.

728x90
반응형