Java : JSOUP 를 이용, html에서 소스, 링크경로 추출후 절대 경로로 바꾸기



Java 라이브러리 중에 JSOUP 라고 심플하면서도 왠지 간지나는 HTML 문서를 다루는 라이브러리가 있다.


요 라이브러리를 이용해 HTML 문서에서 각종 경로를 추출해서 요 경로를 절대 경로로 바꿔보자.


먼저 테스트할 html 문서

<html>
<head>
	<title>테스트다!!</title>

	<script type="text/javascript" src="/resource/js/jquery-1.7.1.min.js"></script>

	<link type="text/css" href="/resource/css/admin/general.css" rel="stylesheet" />
</head>

<body>
<span id="navi">
	<img src="http://www.naver.com/resource/image/stitle_standarda.gif" alt="" />
</span>

테스트다!!
</body>
</html>



테스트 소스

import java.io.IOException;
import java.net.URL;

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


public class Test  {
	public static void main(final String[] args) throws IOException{
		Document doc = Jsoup.parse(
				new URL("http://127.0.0.1:8080/index.html").openConnection().getInputStream(), 
				"UTF-8", 
				"http://127.0.0.1:8080/");
		
		// src attribute 가 있는 엘리먼트들을 선택
		Elements elems = doc.select("[src]");
		for( Element elem : elems ){
			if( !elem.attr("src").equals(elem.attr("abs:src")) ){
				elem.attr("src", elem.attr("abs:src"));
			}
		}
		
		// href attribute 가 있는 엘리먼트들을 선택 
		elems = doc.select("[href]");
		for( Element elem : elems ){
			if( !elem.attr("href").equals(elem.attr("abs:href")) ){
				elem.attr("href", elem.attr("abs:href"));
			}
		}
		
		System.out.println(doc.toString());
	}
}



변환된 html 문서

<html>
<head>
	<title>테스트다!!</title>
	<script type="text/javascript" src="http://127.0.0.1:8080/resource/js/jquery-1.7.1.min.js"></script>
	<link type="text/css" href="http://127.0.0.1:8080/resource/css/admin/general.css" rel="stylesheet" />
</head>
<body>
	<span id="navi"> <img src="http://www.naver.com/resource/image/stitle_standarda.gif" alt="" /></span> 
	테스트다!!
</body>
</html>




JSOUP 사이트 : http://jsoup.org/


Maven Dependency

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



뭐 이것 외에도 JSOUP 를 이용하면 HTML뿐만 아니라 XML 도 쉽게 다룰수 있다.


JQuery 에서 css 셀렉터를 써서 엘리먼트를 가져와서 쪼물닥 거리는 것과 비슷하게 xml 문서를 쉽게 파싱해서 땡겨다 쓸수 있다.


저번에 얼핏 말했던 xpath 를 이용해서 쪼물딱 거리는것 보다 개인적으로 훨씬 좋은것 같다.


JQuery 써본 사람들은 금방 쉽게 대충 파악해서 쓸 수 있다. 고건 시간되면 다음 기회에~