본문 바로가기

Java SE/jsoup, HTML Parser

jsoup, HTML Parser example

jsoup HTML Parser 사용 예



jsoup는 자바 라이브러리이며 웹페이지나 HTML 문자열을 받아서 DOM 오브젝트로 사용할 수 있도록 변환해주는 기능을 한다

HTML 파일이나 웹사이트 URL, 혹은 문자열을 읽어 들여서 DOM 객체를 이용하여 내용을 간편하게 가져올 수 있는 기능을 제공한다

특히 select() 메소드는 CSS Query 를 이용하여 특정 태그를 찾아내기 때문에 CSS, jQuery 등을 사용해본적이 있으면 새로 익혀야할 사용법은 거의 없는 것 같다.


Download http://jsoup.org/download


여기저기 사이트로부터 가져온 사용법 예

// Connect to the web site

Document document = Jsoup.connect(url).get();

// Get the html document title

title = document.title();


// Connect to the web site

Document document = Jsoup.connect(url).get();

// Using Elements to get the Meta data

Elements description = document.select("meta[name=description]");

// Locate the content attribute

desc = description.attr("content");


// Connect to the web site

Document document = Jsoup.connect(url).get();

// Using Elements to get the class data

Elements img = document.select("h1[class=image-logo] img[src]");

// Locate the src attribute

String imgSrc = img.attr("src");

// Download image from URL

InputStream input = new java.net.URL(imgSrc).openStream();

// Decode Bitmap

bitmap = BitmapFactory.decodeStream(input);


Document doc  = Jsoup.connect(URL).get();

Elements topicList = doc.select("h2.topic"); // h2 태그의 class 속성이 'topic' 인 것


Document doc = Jsoup.connect(url).get();

Elements links = doc.select("a[href]");

Elements media = doc.select("[src]");

Elements imports = doc.select("link[href]");


for (Element src : media) 

{

  if (src.tagName().equals("img"))

  {

     System.out.printf(" * %s: <%s> %sx%s (%s)",

       src.tagName(), src.attr("abs:src"), src.attr("width"), 

       src.attr("height"), trim(src.attr("alt"), 20));

  }

  else

     System.out.printf(" * %s: <%s>", src.tagName(), src.attr("abs:src"));

}


for (Element link : imports) 

{

   System.out.printf(" * %s <%s> (%s)", link.tagName(),link.attr("abs:href"), link.attr("rel"));

}



다음은 위의 jsoup 사용법들을 참고하여 작성해본 테스트 예제입니다


특정 페이지에 접근하여 링크 URL을 가져와서 출력하는 jsoup 예

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 JsoupTest 

{

    public static void main(String[] args) throws IOException

    {

        Document doc = Jsoup.connect("http://blog.naver.com/maccamp").get();

        //System.out.printf(doc.toString());

        

        Elements elems =  doc.select("frame[src]"); //CSS 셀렉터

        for(Element elem : elems)

        {

            //String txt = elem.text();

            //String html = elem.html();

            String src = elem.attr("abs:src"); //절대경로로 변경하여 리턴

            doc = Jsoup.connect(src).get();

            Elements elems2 = doc.select("a[href]");

            for(Element e : elems2)

            {

                System.out.println(e.attr("abs:href"));

            }

            //System.out.printf("%s\n", doc.toString());

        }

        

    }

}



로컬 시스템에서 HTML, JSP를 사용하여 테스트한 예제


import java.io.IOException;

import org.jsoup.*;

import org.jsoup.nodes.*;

import org.jsoup.select.*;


public class JsoupTest 

{

    public static void main(String[] args) throws IOException 

    {

        Document doc = Jsoup.connect("http://localhost:8888/jsoup/index.html").get();

        

        Elements elems = doc.select("a");

        

        for(Element ele : elems)

        {

            String link = ele.attr("abs:href");

            if(link.indexOf("12345")!=-1)

            {

                Document doc2 = Jsoup.connect(link).get();

                

                String txt = doc2.text();

                String html = doc2.html();

                String str = doc2.toString();

                

                System.out.println(txt);

                System.out.println("---------------------");

                System.out.println(html);

                System.out.println("---------------------");

                System.out.println(str);

                System.out.println("---------------------");

            }

        }

        

        elems = doc.select("script");

        for(Element ele : elems)

        {

            String txt = ele.text();

            String html = ele.html();

            String str = ele.toString();


            System.out.println(txt);

            System.out.println("---------------------");

            System.out.println(html);

            System.out.println("---------------------");

            System.out.println(str);

            System.out.println("---------------------");

        }

    }

    

}



index.html
<!DOCTYPE HTM>
<HTML>
 <HEAD>
  <TITLE> jsoup Test </TITLE>
  <script type="javascript">
function greetings() 
{
alert('Hello everybody!');
}
  </script>
 </HEAD>
 <BODY>
  <a href="sample.jsp?num=12345"> Click </a>
 </BODY>
</HTML>


sample.jsp
<%@ page contentType="text/html;charset=euc-kr"%>
<%="You got the sample.jsp"%>


위의 jsoup 예제를 실행하면 다음과 같은 결과가 출력됩니다

You got the sample.jsp
---------------------
<html>
 <head></head>
 <body>
   You got the sample.jsp 
 </body>
</html>
---------------------
<html>
 <head></head>
 <body>
   You got the sample.jsp 
 </body>
</html>
---------------------

---------------------
function greetings() 
{
alert('Hello everybody!');
}
---------------------
<script type="javascript">
function greetings() 
{
alert('Hello everybody!');
}
  </script>
---------------------