관리 메뉴

나만의공간

자바로 크롤러 만들기 – Jsoup 사용법 완전 정리 본문

IT/JAVA

자바로 크롤러 만들기 – Jsoup 사용법 완전 정리

밥알이 2025. 6. 21. 11:40

웹 페이지에서 데이터를 추출하는 크롤러는 데이터 수집, 자동화, 검색 기능 등에 다양하게 활용됩니다. 자바에서도 간단하게 웹 크롤링을 구현할 수 있는 대표적인 라이브러리가 바로 Jsoup입니다.

이 글에서는 Jsoup을 사용해 자바로 웹 크롤러를 구현하는 방법을 실전 코드와 함께 정리합니다. HTML 파싱, DOM 탐색, 속성 추출, 에러 처리까지 한 번에 배워보세요.

Jsoup이란?

Jsoup은 Java 기반의 HTML 파서입니다. HTTP로 웹 페이지를 가져오고, HTML을 DOM 트리처럼 파싱하고, CSS 선택자나 DOM 탐색 방식으로 데이터를 추출할 수 있습니다. Python의 BeautifulSoup과 유사한 자바 버전이라고 보면 됩니다.

  • HTML 파싱 및 정제
  • CSS 선택자로 노드 선택
  • 속성 추출 (href, src 등)
  • 폼 데이터 전송 (POST)

1. Jsoup 설치 방법

Maven 사용 시


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

Gradle 사용 시


implementation 'org.jsoup:jsoup:1.17.2'

2. 기본 사용법: 웹 페이지 가져오기


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

public class SimpleCrawler {
    public static void main(String[] args) throws Exception {
        String url = "https://news.ycombinator.com/";
        Document doc = Jsoup.connect(url).get();
        System.out.println(doc.title());
    }
}

출력 결과: Hacker News

포인트

  • Jsoup.connect(url).get() : HTML 전체를 가져옴
  • doc.title() : 페이지의 <title> 태그 추출

 

3. HTML 요소 선택과 텍스트 추출

Jsoup은 CSS 선택자를 지원합니다.


Elements titles = doc.select("a.storylink");
for (Element title : titles) {
    System.out.println(title.text());
}

→ 모든 기사 제목을 추출할 수 있습니다.

자주 쓰는 선택자 예시

  • div.content : class가 content인 div
  • ul > li : ul 하위의 li 태그
  • a[href] : href 속성이 있는 a 태그
  • div#main : id가 main인 div

4. 링크, 이미지 등 속성 추출


Elements links = doc.select("a[href]");
for (Element link : links) {
    System.out.println(link.attr("href"));
}

이미지 URL 추출도 동일한 방식입니다:


Elements imgs = doc.select("img");
for (Element img : imgs) {
    System.out.println(img.attr("src"));
}

5. POST 요청 및 Form 전송

Jsoup은 단순한 로그인 시도, 검색 기능 등도 지원합니다.


Document result = Jsoup.connect("https://example.com/login")
    .data("username", "myuser")
    .data("password", "mypassword")
    .post();

주의: 로그인 후 쿠키 유지, CSRF 토큰 처리 등은 Jsoup만으로는 어렵고 Selenium 또는 HttpClient를 병행해야 합니다.

6. 에러 처리와 User-Agent 설정


Document doc = Jsoup.connect(url)
    .userAgent("Mozilla/5.0")
    .timeout(5000)
    .get();

특정 사이트는 봇 접근을 막기 위해 User-Agent를 검사합니다. 위 코드는 일반 브라우저처럼 접근할 수 있게 합니다.

에러 처리


try {
    Document doc = Jsoup.connect(url).get();
} catch (HttpStatusException e) {
    System.out.println("HTTP 오류: " + e.getStatusCode());
} catch (IOException e) {
    System.out.println("연결 실패: " + e.getMessage());
}

7. 실전 예제: 뉴스 제목 크롤링 프로젝트

실제 뉴스 사이트에서 최신 기사 제목과 링크를 추출하는 예제를 살펴보겠습니다.


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

public class NewsCrawler {
    public static void main(String[] args) throws Exception {
        String url = "https://news.daum.net/";
        Document doc = Jsoup.connect(url)
            .userAgent("Mozilla/5.0")
            .get();

        Elements headlines = doc.select("div.item_issue a.link_txt");
        for (Element headline : headlines) {
            System.out.println("제목: " + headline.text());
            System.out.println("링크: " + headline.absUrl("href"));
            System.out.println();
        }
    }
}

실행 결과 예시

제목: 국내 코로나19 신규 확진자 7,542명
링크: https://news.daum.net/xxxxxxx

제목: 이재명 "경제회복 집중할 것"
링크: https://news.daum.net/yyyyyyy

→ 실전 크롤링 프로젝트의 기초로 활용할 수 있습니다.

8. Jsoup 크롤러 활용 시 주의사항

  • robots.txt 준수: 크롤링 금지된 영역은 피해 주세요.
  • 과도한 요청 금지: sleep, throttling 필수
  • 정적 페이지 대상: Jsoup은 JavaScript 렌더링 불가

만약 자바스크립트 기반 SPA 사이트를 크롤링하고 싶다면 Selenium, Puppeteer 등 헤드리스 브라우저 도구를 사용해야 합니다.

마무리: 자바 크롤러 개발, Jsoup으로 쉽게 시작하자

Jsoup은 자바 개발자가 웹 데이터를 수집하는 데 가장 쉽게 접근할 수 있는 강력한 도구입니다. 복잡한 설정 없이도 HTML을 탐색하고 원하는 데이터를 추출할 수 있어 웹 자동화, 가격 비교, 뉴스 수집, 오픈 API 없는 사이트 정보 추출 등 다양한 곳에서 활용됩니다.

이 글에서 소개한 예제를 바탕으로, 여러분만의 크롤러 프로젝트를 시작해보세요. Jsoup으로 자바 기반 웹 데이터 수집의 첫 발을 내딛을 수 있습니다.

추가 확장 아이디어:

  • 크롤링한 데이터를 MySQL 또는 CSV로 저장
  • Spring Boot + Jsoup으로 뉴스 알림 REST API 만들기
  • Jsoup + Telegram Bot 연동으로 실시간 뉴스 알림

앞으로 더 심화된 크롤러 구축법이나 대용량 크롤링, 스케줄링 자동화에 대한 포스팅도 이어갈 예정이니 관심 있게 지켜봐 주세요!

Comments