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

import org.htmlparser.Parser;
import org.htmlparser.Node;
import org.htmlparser.NodeFilter;
import org.htmlparser.filters.TagNameFilter;
import org.htmlparser.filters.NodeClassFilter;
import org.htmlparser.http.ConnectionManager;
import org.htmlparser.http.ConnectionMonitor;
import org.htmlparser.http.HttpHeader;
import org.htmlparser.lexer.Lexer;
import org.htmlparser.lexer.Page;
import org.htmlparser.util.DefaultParserFeedback;
import org.htmlparser.util.IteratorImpl;
import org.htmlparser.util.NodeIterator;
import org.htmlparser.util.NodeList;
import org.htmlparser.util.ParserException;
import org.htmlparser.util.ParserFeedback;
import org.htmlparser.util.EncodingChangeException;
import org.htmlparser.visitors.NodeVisitor;
import org.htmlparser.tags.*;
import org.htmlparser.nodes.*;

public class SimpleParser2 {
    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 SimpleParser2"
				+ " <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 SimpleParser2"
				+ " 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);
                for (NodeIterator i = list.elements (); 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() + "\"");
        }
        if (node instanceof RemarkNode)
        {
            // Node から RemarkNode にキャスト
            RemarkNode remark = (RemarkNode)node;
            // ここにコメントに対してしたい処理を書く
        }
        else if (node instanceof TagNode)
        {
            // Node から TagNode にキャスト
            TagNode tag = (TagNode)node;
            System.out.println("tag name: " + tag.getTagName());
            System.out.println("tag text: " + tag.getText());
            // ここにタグそのものに対してしたい処理を書く
            // ...
            // getChildren() を使ってノード内のノードを再帰的に処理
            NodeList nl = tag.getChildren ();
            if (null != nl)
                for (NodeIterator i = nl.elements (); i.hasMoreNodes(); )
                    processMyNodes (i.nextNode ());
        }
    }
}

SimpleParser2.java