일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 |
- GPT
- JetBrains
- 민생회복소비쿠폰
- 개발생산성
- java
- 버전관리
- Ai
- git연재
- 디버깅
- 배당소득 분리과세
- gitreflog
- gitreset
- docker
- 민생회복지원금
- IntelliJ
- 주식용어
- git입문
- python
- AES256
- scrapy
- git초보
- 자동포맷팅
- 자바패턴
- MYSQL
- Spring
- git초보자팁
- gitlog
- gradle
- 개발툴팁
- git
나만의공간
자바로 크롤러 만들기 – Jsoup 사용법 완전 정리 본문
웹 페이지에서 데이터를 추출하는 크롤러는 데이터 수집, 자동화, 검색 기능 등에 다양하게 활용됩니다. 자바에서도 간단하게 웹 크롤링을 구현할 수 있는 대표적인 라이브러리가 바로 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인 divul > 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 연동으로 실시간 뉴스 알림
앞으로 더 심화된 크롤러 구축법이나 대용량 크롤링, 스케줄링 자동화에 대한 포스팅도 이어갈 예정이니 관심 있게 지켜봐 주세요!
'IT > JAVA' 카테고리의 다른 글
자바 입문자를 위한 객체지향 개념 정리 – OOP 완전 입문 (2) | 2025.06.21 |
---|---|
자바 초보자가 자주 하는 실수 10가지와 해결법 (1) | 2025.06.21 |
Spring Security로 로그인 기능 구현하기 (JWT 포함) (1) | 2025.06.20 |
🚀 Spring Boot로 REST API 만들기 완전 정복 (1) | 2025.06.17 |
🦋 플라이웨이트(Flyweight) 패턴 완전 정복 (1) | 2025.06.01 |