SimpleParser3
import java.io.Serializable;
import java.net.HttpURLConnection;
import java.net.URLConnection;

import org.htmlparser.*;
import org.htmlparser.filters.*;
import org.htmlparser.http.*;
import org.htmlparser.lexer.*;
import org.htmlparser.util.*;
import org.htmlparser.visitors.*;
import org.htmlparser.tags.*;
import org.htmlparser.nodes.*;

public class SimpleParser3 {
    public static void main (String [] args) {
        Parser parser = null;
        NodeFilter filter = null;

        if (args.length < 1 || args[0].equals ("-help")) {
	    System.out.println ("HTML Parser v" + Parser.getVersion () + "\n");
	    System.out.println ();
	    System.out.println ("Syntax : java SimpleParser3"
				+ " <file/page> [type]");
	    System.out.println ("   <file/page> the URL or file to be parsed");
	    System.out.println ("   type the node type, for example:");
	    System.out.println ("     A - Show only the link tags");
	    System.out.println ("     IMG - Show only the image tags");
	    System.out.println ("     TITLE - Show only the title tag");
	    System.out.println ();
	    System.out.println ("Example : java SimpleParser3"
				+ " http://www.yahoo.com");
	    System.out.println ();
	}
        else
            try {
		parser = new Parser ();
		if (1 < args.length)
		    filter = new TagNameFilter (args[1]);
		else
		    {
			filter = null;
			// for a simple dump, use more verbose settings
			parser.setFeedback (Parser.STDOUT);
			Parser.getConnectionManager ().setMonitor (parser);
		    }
		Parser.getConnectionManager ().setRedirectionProcessingEnabled (true);
		Parser.getConnectionManager ().setCookieProcessingEnabled (true);
		parser.setResource (args[0]);
		NodeList list = parser.parse(filter);
		NodeIterator i = list.elements ();
                while (i.hasMoreNodes ())
                    processMyNodes(i.nextNode ());
	    }
            catch (EncodingChangeException ece) {
		try {
		    // 文字コードが想定と違った場合、検出された文字コードで再度処理
		    parser.reset ();
		    NodeList list = parser.parse(filter);
		    for (NodeIterator i = list.elements (); i.hasMoreNodes (); )
			processMyNodes (i.nextNode ());
		}
		catch (ParserException e) {
		    e.printStackTrace ();
		}
            }
            catch (ParserException e) {
                e.printStackTrace ();
            }
    }
    static void processMyNodes (Node node) throws ParserException {
        if (node instanceof TextNode)
        {
            // Node から TextNode にキャスト
            TextNode text = (TextNode)node;
            // ここにテキストに対してしたい処理を書く
	    System.out.println("text: \"" + text.getText() + "\"");
        }
        else if (node instanceof RemarkNode)
        {
            // Node から RemarkNode にキャスト
            RemarkNode remark = (RemarkNode)node;
            // ここにコメントに対してしたい処理を書く
        }
        else if (node instanceof HeadTag)
        {
            // Node から HeadTag にキャスト
            HeadTag tag = (HeadTag)node;
	    NodeList nl = tag.getChildren ();
	    if (nl != null)
		for (NodeIterator i = nl.elements (); i.hasMoreNodes();) {
		    Node nextNode = i.nextNode();
		    if(nextNode instanceof TitleTag) {
			System.out.println("Title: " + ((TitleTag)nextNode).getTitle());
			break;
		    }
		}
        }
        else if (node instanceof TagNode)
        {
            // Node から TagNode にキャスト
            TagNode tag = (TagNode)node;
	    String tagName = tag.getTagName();
            System.out.println("tag name: " + tagName);
            System.out.println("tag text: " + tag.getText());
	    if(tag instanceof LinkTag) {
	       LinkTag link = (LinkTag)tag;
	       // 相対URLは絶対URLに変換される
	       System.out.println("Link: " + link.getLink());
	    }
            // ここにタグそのものに対してしたい処理を書く
            // ...
            // getChildren() を使ってノード内のノードを再帰的に処理
            NodeList nl = tag.getChildren ();
            if (null != nl)
                for (NodeIterator i = nl.elements (); i.hasMoreNodes(); )
                    processMyNodes (i.nextNode ());
        }
    }
}

SimpleParser3.java