2023-11-28 작성

Java에서 jsoup을 이용하여 HTML parsing 하기

자바에서 jsoup 라이브러리는 HTML 문서를 파싱 하여대부분의 사이트의 원하는 정보만 뽑아낼 수 있는 라이브러리이다. 파이썬의 BeautifulSoup와 비슷한 기능이다.

jsoup 라이브러리 추가(pom.xml)

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

파싱할 대상 페이지 찾기

w3schools 사이트에서 상단 메뉴에 나열된 프로그래밍 언어 목록을 파싱 하여 가져오려고 한다.

F12로 개발자도구를 열어 메뉴를 선택해서 가져올 selector 키워드를 찾는다.
<div id="subtopnav"> 태그로 감싸져 있는 <a class="ga-nav"> 목록을 가져올 것이다. 참고로 홈페이지가 리뉴얼되어 모양이 바뀌면 selector 역시 바뀔 수 있다. 

Parser 클래스

HTML을 파싱 하여 페이지 정보를 가져올 클래스를 작성하자. selector 변수는 CSS selector 문법과 유사한데 selector-syntax를 참고하여 가져오고 싶은 부분을 기술하면 된다.

  • el#id : id로 가지고 오기
  • el.class : class로 가지고 오기
  • el[attr] : attribute로 가지고 오기
  • parent > child : parent 바로 밑의 자식 노드를 가지고 오기
import java.io.IOException;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;

public class Sample {
	public static void main(String[] args) {

		/**
		 * Document 클래스 : 연결해서 얻어온 HTML 전체 문서 
		 * Element 클래스 : Documnet의 HTML 요소 
		 * Elements 클래스 : Element가 모인 자료형
		 */
		String url = "https://www.w3schools.com"; // 추출 사이트
		String selector = "div#subtopnav .ga-nav"; // 추출 대상
		Document doc = null;

		try {
			doc = Jsoup.connect(url).get(); // 1. get방식의 URL에 연결해서 가져온 값을 doc에 담는다.
		} catch (IOException e) {
			System.out.println(e.getMessage());
		}

		Elements titles = doc.select(selector); // 2. doc에서 selector의 내용을 가져와 Elemntes 클래스에 담는다.

		for (Element element : titles) { // 3. Elemntes 길이만큼 반복한다.
			System.out.println(element.text()); // 4. 원하는 요소가 출력된다.
		}
	}
}

실행 결과

HTML
CSS
JAVASCRIPT
SQL
PYTHON
JAVA
PHP
HOW TO
W3.CSS
C
C++
C#
BOOTSTRAP
...생략