[java] Jsoup을 사용하여 웹페이지 내 특정 요소 속성값 추출하고 수정하기

이번 포스트에서는 Jsoup 라이브러리를 사용하여 Java로 웹페이지의 특정 요소의 속성값을 추출하고 수정하는 방법에 대해 알아보겠습니다.

Jsoup이란?

Jsoup은 Java로 작성된 HTML 파싱 라이브러리입니다. 이 라이브러리를 사용하면 웹페이지의 HTML을 쉽게 다룰 수 있습니다. Jsoup은 HTML 문서를 파싱하여 DOM 트리를 생성하고, 이를 통해 HTML 문서의 요소들을 검색하고 조작할 수 있습니다.

필요한 라이브러리 설치

먼저, 프로젝트에 Jsoup 라이브러리를 추가해야 합니다. Maven을 사용하는 경우, pom.xml 파일에 다음과 같이 의존성을 추가합니다.

<dependency>
    <groupId>org.jsoup</groupId>
    <artifactId>jsoup</artifactId>
    <version>1.14.1</version>
</dependency>

Gradle을 사용하는 경우, build.gradle 파일에 다음과 같이 의존성을 추가합니다.

implementation 'org.jsoup:jsoup:1.14.1'

웹페이지에서 속성값 추출하기

Jsoup을 사용하여 웹페이지에서 특정 요소의 속성값을 추출하는 방법을 알아보겠습니다. 예를 들어, 다음과 같은 HTML 코드가 있다고 가정해봅시다.

<html>
<head>
    <title>웹페이지</title>
</head>
<body>
    <div id="content" class="container">
        <h1>Hello, Jsoup!</h1>
        <p>이것은 예제 웹페이지입니다.</p>
        <a href="https://example.com">방문하기</a>
    </div>
</body>
</html>

이 HTML 코드에서 <div> 요소의 idclass 속성값을 추출해보겠습니다. 다음은 Java 코드 예시입니다.

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;

public class JsoupExample {
    public static void main(String[] args) throws Exception {
        // 웹페이지를 Jsoup으로 가져옵니다.
        Document doc = Jsoup.connect("https://example.com").get();

        // div 요소를 선택합니다.
        Element divElement = doc.select("div").first();

        // div 요소의 id와 class 속성값을 추출합니다.
        String idValue = divElement.id();
        String classValue = divElement.className();

        // 추출한 속성값을 출력합니다.
        System.out.println("id: " + idValue);
        System.out.println("class: " + classValue);
    }
}

위 예제는 Jsoup을 사용하여 웹페이지의 <div> 요소의 idclass 속성값을 추출하는 방법을 보여줍니다.

속성값 수정하기

이번에는 Jsoup을 사용하여 웹페이지의 특정 요소의 속성값을 수정하는 방법을 알아보겠습니다. 위에서 사용한 예제 HTML 코드를 기준으로, <div> 요소의 class 속성값을 수정해보겠습니다. 다음은 Java 코드 예시입니다.

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;

public class JsoupExample {
    public static void main(String[] args) throws Exception {
        // 웹페이지를 Jsoup으로 가져옵니다.
        Document doc = Jsoup.connect("https://example.com").get();

        // div 요소를 선택합니다.
        Element divElement = doc.select("div").first();

        // div 요소의 class 속성값을 수정합니다.
        divElement.attr("class", "new-class-value");

        // 수정된 속성값을 출력합니다.
        System.out.println("Modified class value: " + divElement.className());

        // 수정된 웹페이지를 파일로 저장합니다.
        doc.outputSettings().charset("UTF-8");
        doc.outputSettings().indentAmount(4);
        doc.outputSettings().prettyPrint(true);
        doc.outputSettings().outline(true);
        doc.outputSettings().syntax(Document.OutputSettings.Syntax.xml);
        doc.outputSettings().escapeMode(org.jsoup.nodes.Entities.EscapeMode.xhtml);
        doc.outputSettings().charset("UTF-8");

        doc.outputSettings().charset("UTF-8");
        doc.outputSettings().indentAmount(4);
        doc.outputSettings().prettyPrint(true);
        doc.outputSettings().outline(true);
        doc.outputSettings().syntax(Document.OutputSettings.Syntax.xml);
        doc.outputSettings().escapeMode(org.jsoup.nodes.Entities.EscapeMode.xhtml);
        doc.outputSettings().charset("UTF-8");

        doc.html(doc.html().replace("</br>", "<br />"));

        doc.outputSettings().charset("UTF-8");
        doc.outputSettings().indentAmount(4);
        doc.outputSettings().prettyPrint(true);
        doc.outputSettings().outline(true);
        doc.outputSettings().syntax(Document.OutputSettings.Syntax.xml);
        doc.outputSettings().escapeMode(org.jsoup.nodes.Entities.EscapeMode.xhtml);
        doc.outputSettings().charset("UTF-8");

        File outputFile = new File("modified.html");
        FileOutputStream fileOutputStream = new FileOutputStream(outputFile);
        OutputStreamWriter outputStreamWriter = new OutputStreamWriter(fileOutputStream, "UTF-8");
        BufferedWriter bufferedWriter = new BufferedWriter(outputStreamWriter);
        bufferedWriter.write(doc.html());
        bufferedWriter.close();

        System.out.println("Modified HTML saved to: " + outputFile.getAbsolutePath());
    }
}

위 예제는 Jsoup을 사용하여 웹페이지의 <div> 요소의 class 속성값을 수정하는 방법을 보여줍니다. 수정된 HTML은 “modified.html” 파일로 저장됩니다.

정리

이번 포스트에서는 Jsoup을 사용하여 Java로 웹페이지의 특정 요소의 속성값을 추출하고 수정하는 방법을 살펴보았습니다. Jsoup은 HTML 파싱에 강력한 기능을 제공하여 웹페이지의 구조를 손쉽게 조작할 수 있게 해줍니다. Jsoup을 사용하면 웹 스크레이핑이나 웹 크롤링과 같은 작업을 효율적으로 수행할 수 있습니다.

더 많은 Jsoup의 기능과 사용 예제는 Jsoup 공식 문서를 참고하시기 바랍니다.