2007/08/05 10:48



웹페이지 파싱하기…

JDK의 swing 패키지에는 html을 파싱 하는 기능이 포함되어 있는데 이기능을 적절히 이용하면 웹 페이지에서 원하는 내용을 추출 할 수 있을 것입니다.

다음의 예제를 보시면 html Tag중에서 원하는 태그의 내용을 간단히 파싱하는 것을 확인 할 수 있으니 참고 하시기 바랍니다…

[예제 – HTMLParsing.java]

import! javax.swing.text.html.HTMLEditorKit;
import! javax.swing.text.html.HTML;
import! java.io.InputStreamReader;
import! java.net.URL;
import! java.net.HttpURLConnection;
import! javax.swing.text.MutableAttributeSet;
import! javax.swing.text.html.parser.ParserDelegator;

/*
* Created on 2005. 2. 26
*
* TODO To change the template for this generated file go to
* Window - Preferences - Java - Code Style - Code Templates
*/

/**
* @author 이종철
*
* TODO To change the template for this generated type comment go to
* Window - Preferences - Java - Code Style - Code Templates
*/
public class HTMLParsing {
       
        //파서는 콜백 형식으로 되어 있다. 각 태그가 들어 올때 적절한 메소드가 호출됨
        private class CallbackHandler extends HTMLEditorKit.ParserCallback {
               
                //태그가 시작할 때 호출 되는 메소드
                public void handleStartTag(HTML.Tag tag, MutableAttributeSet a, int pos) {
                       
                        //<A href 인 경우...  A태그를 찾는다...
                        if (tag == HTML.Tag.A) {
                                System.out.println(a.getAttribute(javax.swing.text.html.HTML.Attribute.HREF));
                        }                                       
                }
               
                //텍스트가 들어올때 호출되는 메소드
                public void handleText(char[] data, int pos) {
                        System.out.println(data);
                }
        }
       
        public void parse(String str) {
                String content = null;
               
                try {
               
                //입력받은 URL에 연결하여 InputStream을 통해 읽은 후 파싱 한다.
                URL url = new URL(str);
               
                HttpURLConnection con = (HttpURLConnection)url.openConnection();
               
                InputStreamReader reader = new InputStreamReader(con.getInputStream(),"euc-kr");
               
                new ParserDelegator().parse(reader, new CallbackHandler(), true);
               
                con.disconnect();
                }
                catch(Exception e) {
                        e.printStackTrace();
                }
        }
       
        public static void main(String[] args) {
                HTMLParsing parser = new HTMLParsing();
                parser.parse("http://www.oraclejava.co.kr");
        }
}

[결과]

..…..
……
[프로젝트]
TOAD를 만들자!
DRM For P2P
http://oraclejava.co.kr/zboard/zboard.php?id=notice
[이종철]
http://oraclejava.co.kr/zboard/view.php?id=notice&no=60
비트캠프 교육 과정 소개

2005/02/19??
[이종철]
http://oraclejava.co.kr/zboard/view.php?id=notice&no=48
설날 잘 보내세요~

[1]
2005/02/04??
[이종철]
http://oraclejava.co.kr/zboard/view.php?id=notice&no=45
New 프로젝트 연재!

2005/01/24??
[이종철]
http://oraclejava.co.kr/zboard/view.php?id=notice&no=44
스트럿츠 게시판 강좌가 마무리 ...

2005/01/20??
[이종철]
http://oraclejava.co.kr/zboard/view.php?id=notice&no=43
토드(TOAD)를 만들어 볼까요?...

[2]
2005/01/18??
http://oraclejava.co.kr/zboard/zboard.php?id=freeboard
[이종철]
http://oraclejava.co.kr/zboard/view.php?id=freeboard&no=70
회원등록 700명 돌파...^^

……
……
출처 : http://blog.daum.net/_blog/BlogView.do?blogid=07wRi&articleno=5205389#ajax_history_home
Posted by kimgisa.net