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