Java로 Jsoup를 이용한 웹 스크래핑 마스터하기

2025-06-24 · Uncategorized · 읽는데 14분

Java로 Jsoup를 이용한 웹 스크래핑 마스터하기
```markdown 웹 스크래핑은 비즈니스와 데이터 분석, 연구 등 여러 분야에서 중요한 역할을 하고 있습니다. 특히, 자바를 이용한 웹 스크래핑은 정형화된 데이터 수집을 효과적으로 수행할 수 있는 방법 중 하나입니다. 이번 글에서는 Jsoup 라이브러리를 활용하여 자바에서 웹 스크래핑을 수행하는 방법에 대해 자세히 알아보겠습니다.

썸네일

Jsoup 소개

Jsoup은 자바로 작성된 HTML 파서로, 웹 페이지에서 데이터를 추출하고 조작하는 데 필요한 기능들을 제공합니다. 이 라이브러리는 HTML5 DOM 메소드를 지원하며, CSS 선택자를 통해 원하는 데이터를 쉽게 찾을 수 있도록 도와줍니다. 따라서, 복잡한 HTML 구조에서도 직관적으로 데이터를 추출할 수 있습니다.

기능 설명
HTML 파싱 HTML 문서를 파싱하여 DOM 구조로 변환합니다.
CSS 선택자 지원 CSS 선택자를 이용해 특정 요소를 쉽게 선택할 수 있습니다.
URL 연결 URL에 대한 연결을 생성하고 데이터를 가져올 수 있습니다.
XSS 안전성 웹 애플리케이션의 보안을 고려한 데이터 조작 기능을 제공합니다.

Jsoup의 가장 큰 장점은 사용이 간편하다는 점입니다. 공식 문서에서 제공하는 예제 코드만으로도 쉽게 웹 스크래핑을 시작할 수 있습니다. 또한, 오픈소스로 제공되기 때문에 부담 없이 사용할 수 있습니다.

Jsoup 설치하기

Jsoup을 사용하기 위해서는 먼저 프로젝트에 라이브러리를 추가해야 합니다. Gradle 또는 Maven을 사용하는 방법을 통해 손쉽게 설치할 수 있습니다. Gradle을 사용하는 경우, build.gradle 파일에 다음과 같은 의존성을 추가하면 됩니다.

```groovy

dependencies { implementation 'org.jsoup:jsoup:1.14.3' }

```

Maven 사용자는 pom.xml 파일에 아래와 같이 추가할 수 있습니다.

```xml

org.jsoup jsoup 1.14.3

```

이제 Jsoup을 사용할 준비가 완료되었습니다. Jsoup을 설치한 후에는 실제 웹 페이지를 스크래핑하는 방법을 알아보겠습니다.

다른 내용도 보러가기 #1

웹 페이지 스크래핑 기본 예제

웹 페이지 스크래핑을 시작하기 전에, 먼저 스크래핑할 웹 사이트의 robots.txt 파일을 확인하여 스크래핑이 허용되는지 확인해야 합니다. 예를 들어, Yahoo Finance의 robots.txt 파일을 확인할 수 있습니다.

```plaintext

User-agent: * Disallow: /search

```

위와 같은 규칙을 통해 특정 페이지에 대한 스크래핑이 허용되지 않음을 알 수 있습니다. 따라서, 스크래핑을 시도하기 전에 반드시 이러한 규칙을 준수해야 합니다.

이제 실제로 웹 페이지에서 데이터를 스크래핑하는 기본적인 코드를 작성해 보겠습니다.

```java

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

public class WebScraper { public static void main(String[] args) { try { // 웹 페이지 연결 및 문서 가져오기 Document doc = Jsoup.connect("https://finance.yahoo.com/quote/KO/history").get();

        // 클래스명이 "table yf-ewueuo noDl"인 요소 검색
        Elements tableElements = doc.getElementsByAttributeValue("class", "table yf-ewueuo noDl");
        for (Element table : tableElements) {
            Element tbody = table.children().get(1); // tbody 요소 가져오기
            for (Element row : tbody.children()) {
                if (row.text().endsWith("Dividend")) {
                    // 특정 조건을 만족하는 데이터 추출
                    System.out.println(row.text());
                }
            }
        }
    } catch (Exception e) {
        e.printStackTrace();
    }
}

}

```

위 코드에서는 Yahoo Finance의 특정 주식의 역사적 데이터를 가져와서, 각 행에서 "Dividend"로 끝나는 경우에만 해당 데이터를 출력합니다. 이처럼 Jsoup을 활용하면 간단하게 필요한 정보를 추출할 수 있습니다.

코드 설명 내용
Connection 웹 페이지에 연결하여 Document 객체를 생성합니다.
Element 검색 CSS 선택자를 사용하여 원하는 요소를 찾습니다.
데이터 추출 각 행을 순회하며 조건에 맞는 데이터를 출력합니다.

데이터 조작 및 변환

스크래핑한 데이터를 단순히 출력하는 데 그치지 않고, 원하는 형식으로 변환할 수 있습니다. 예를 들어, 데이터를 CSV 파일로 저장하거나 데이터베이스에 저장하는 등의 작업을 수행할 수 있습니다. 여기서는 데이터를 CSV 형식으로 변환하여 저장하는 예제를 살펴보겠습니다.

```java

import java.io.FileWriter; import java.io.IOException;

public class WebScraper { public static void main(String[] args) { try { Document doc = Jsoup.connect("https://finance.yahoo.com/quote/KO/history").get(); Elements tableElements = doc.getElementsByAttributeValue("class", "table yf-ewueuo noDl"); FileWriter csvWriter = new FileWriter("historical_data.csv");

        // CSV 파일 헤더 작성
        csvWriter.append("Date,Dividend\n");

        for (Element table : tableElements) {
            Element tbody = table.children().get(1);
            for (Element row : tbody.children()) {
                if (row.text().endsWith("Dividend")) {
                    csvWriter.append(row.text()).append("\n");
                }
            }
        }
        csvWriter.flush();
        csvWriter.close();
    } catch (IOException e) {
        e.printStackTrace();
    }
}

}

```

위 코드에서는 파일 쓰기 기능을 추가하여, 스크래핑한 데이터를 CSV 파일로 저장합니다. 이를 통해 웹 스크래핑을 통해 얻은 데이터를 쉽게 관리하고 활용할 수 있습니다.

데이터 조작 방법 설명
파일 쓰기 스크래핑한 데이터를 CSV 파일로 저장합니다.
데이터 형식 변환 필요한 형식으로 데이터를 변환하여 저장합니다.

동적 웹 페이지 스크래핑의 한계

Jsoup은 정적 웹 페이지에 대한 스크래핑에 매우 유용하지만, 동적 웹 페이지의 경우 JavaScript에 의해 내용이 변경되는 경우가 많아 스크래핑이 어려울 수 있습니다. Jsoup은 이러한 동적 페이지에 대한 지원이 부족하기 때문에, Selenium과 같은 다른 라이브러리를 사용해야 할 필요성이 있습니다.

Selenium은 웹 브라우저를 자동으로 조작할 수 있는 도구로, Java로 작성된 Selenium WebDriver를 사용하면 동적 웹 페이지의 데이터를 스크래핑할 수 있습니다. Selenium을 사용할 경우, 실제 브라우저를 통해 페이지를 로드하고, JavaScript로 생성된 요소를 포함한 데이터를 쉽게 추출할 수 있습니다.

라이브러리 설명
Jsoup 정적 웹 페이지 스크래핑에 최적화된 라이브러리입니다.
Selenium 동적 웹 페이지 스크래핑을 위한 브라우저 자동화 도구입니다.

다른 내용도 보러가기 #2

결론

Jsoup을 활용한 웹 스크래핑은 자바 개발자에게 매우 유용한 기술입니다. 사용하기 쉽고 강력한 기능을 제공하여, 필요한 데이터를 효율적으로 추출할 수 있습니다. 그러나 동적 웹 페이지의 경우에는 Jsoup의 한계를 인지하고, Selenium과 같은 대체 라이브러리를 활용하여 문제를 해결해야 합니다.

웹 스크래핑은 실제 프로젝트에서 데이터 수집의 중요한 역할을 수행하며, 다양한 응용 분야에서 활용될 수 있습니다. 정적 페이지에서 시작하여 점차 동적 페이지로 확장해 나가는 것도 좋은 접근 방법입니다. 이 글이 여러분의 웹 스크래핑 여정에 도움이 되기를 바랍니다. ```

관련 영상

같이 보면 좋은 글