본문 바로가기

Programming/Java & JSP & Spring

[Java] Jsoup 사용법

파이썬에는 BeautifulSoup이 있고, C#에는 HtmlAgilityPack이 있다면

Java에는 HTML을 파싱하기 위해 사용되는 라이브러리 Jsoup이 존재한다.


사용방법은 해당 홈페이지 http://jsoup.org/download 에서 다운을 받거나

메이븐등을 이용해 라이브러리를 추가해주면 된다.

<!-- Jsoup -->

<dependency>

<groupId>org.jsoup</groupId>

<artifactId>jsoup</artifactId>

<version>1.10.2</version>

</dependency>

자바 프로젝트에 라이브러리를 추가했다면 Jsoup을 Import한다.

기본적인 사용법은 다음과 같다.

import org.jsoup.Jsoup;

import org.jsoup.nodes.Document;

import org.jsoup.select.Elements;

 

try {

//웹에서 내용을 가져온다.

Document doc = Jsoup.connect("http://jobc.tistory.com/").get();

//내용 중에서 원하는 부분을 가져온다.

Elements contents = doc.select(".class #id");

//원하는 부분은 Elements형태로 되어 있으므로 이를 String 형태로 바꾸어 준다.

String text = contents.text();

System.out.println(text);

} catch (IOException e) { //Jsoup의 connect 부분에서 IOException 오류가 날 수 있으므로 사용한다.   

e.printStackTrace();

}


※ class명이 test인 항목을 가져오는 방법

Elements items = doc.select(".test");

※ id명이 test인 항목을 가져오는 방법

Elements items = doc.select("#test");

※ class명이 test인 항목 안의 a태그만 가져오는 방법

Elements tags = doc.select(".test a");


select메소드는 생각보다 굉장히 강력하다.

가령 select("img[src$=.png]")는 이미지 태그중

소스 파일 이름이 .png을 포함하고 있는 태그들만 추출한다.

$=는 해당 문자열로 끝나는 attribute이 있는 확인할 수 있는 selector이다.

비슷한 selector로 ^=는 해당 문자열로 시작하는 attribute가 있는지 찾고,

*= 는 해당 문자열을 포함하는지 확인한다.


그렇다면 텍스트가 아닌 HTML속성을 가져오고 싶을 때는 어떻게 해야할까?

예를 들어 HTML속성이 다음과 같다고 가정한다.

<a href="href1" title="Title1">Title</a>

이중에서 href을 가져오고 싶다면 다음과 같이 한다.

Elements contents = doc.select(".class #id");

String text = contents.attr("href"); // attr은 기본적으로 String형이다.


text()와 toString()은 다르다.

text()는 <> 와 </> 사이에 있는 텍스트만 가져오는데 반해,

toString()은 가져온 전체 값을 리턴한다.

text()의 결과값 : Test

toString()의 결과값 : <strong> Test </strong>

 







출처 :

http://slg1119.tistory.com/category/Java

http://yujuwon.tistory.com/entry/jsoup-사용하기

http://edoli.tistory.com/95