파이썬에는 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 |
'Programming > Java & JSP & Spring' 카테고리의 다른 글
[JSP] JSTL FOR구문 (c:forEach, c:forToken) (0) | 2017.03.23 |
---|---|
[JSP] View로 전달된 배열 접근하기 (0) | 2017.03.21 |
[Spring] HttpSession과 인터셉터 (0) | 2017.02.21 |
[Spring] HiddenMethod의 활용 (0) | 2017.02.15 |
[Spring] @RequestParam 파라미터 매핑 (0) | 2017.02.14 |