html parserの使用例



package test;

import java.net.URL;

import org.apache.log4j.Logger;
import org.htmlparser.Node;
import org.htmlparser.NodeFilter;
import org.htmlparser.Parser;
import org.htmlparser.Tag;
import org.htmlparser.beans.LinkBean;
import org.htmlparser.filters.NodeClassFilter;
import org.htmlparser.filters.OrFilter;
import org.htmlparser.filters.TagNameFilter;
import org.htmlparser.tags.HeadTag;
import org.htmlparser.tags.ImageTag;
import org.htmlparser.tags.InputTag;
import org.htmlparser.tags.LinkTag;
import org.htmlparser.tags.OptionTag;
import org.htmlparser.tags.SelectTag;
import org.htmlparser.tags.TableColumn;
import org.htmlparser.tags.TableRow;
import org.htmlparser.tags.TableTag;
import org.htmlparser.tags.TitleTag;
import org.htmlparser.util.NodeIterator;
import org.htmlparser.util.NodeList;
import org.htmlparser.util.ParserException;
import org.htmlparser.visitors.HtmlPage;
import org.htmlparser.visitors.NodeVisitor;
import org.htmlparser.visitors.ObjectFindingVisitor;

public class ParserTestCase {

    private static final Logger logger = Logger.getLogger(ParserTestCase.class);

    public static void main(String srgs[]) {
        ParserTestCase testCase = new ParserTestCase();
//       testCase.testImageVisitor();
//        testCase.testNodeFilter();
//        testCase.testLinkTag();
//        testCase.testLinkCSS();
//        testCase.testOrFilter();
//        testCase.testTable();
//        testCase.testVisitorAll();
//        testCase.testTagVisitor();
        testCase.testHtmlPage();
//        testCase.testLinkBean();
    }

    /*
     *   ObjectFindVisitor   
     */
    public void testImageVisitor() {
        try {
            ImageTag imgLink;
            ObjectFindingVisitor visitor = new ObjectFindingVisitor(ImageTag.class);
            Parser parser = new Parser();
            parser.setURL("http://www.google.com");
            parser.setEncoding(parser.getEncoding());
            parser.visitAllNodesWith(visitor);
            Node[] nodes = visitor.getTags();
            for (int i = 0; i < nodes.length; i++) {
                imgLink = (ImageTag) nodes[i];
                logger.fatal("testImageVisitor() ImageURL = " + imgLink.getImageURL());
                logger.fatal("testImageVisitor() ImageLocation = " + imgLink.extractImageLocn());
                logger.fatal("testImageVisitor() SRC = " + imgLink.getAttribute("SRC"));
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    /*
     *   TagNameFilter  
     */
    public void testNodeFilter() {
        try {
            NodeFilter filter = new TagNameFilter("IMG");
            Parser parser = new Parser();
            parser.setURL("http://www.google.com");
            parser.setEncoding(parser.getEncoding());
            NodeList list = parser.extractAllNodesThatMatch(filter);
            for (int i = 0; i < list.size(); i++) {
                logger.fatal("testNodeFilter() " + list.elementAt(i).toHtml());
            }
        } catch (Exception e) {
            e.printStackTrace();
        }

    }

    /*
     *   NodeClassFilter  
     */
    public void testLinkTag() {
        try {

            NodeFilter filter = new NodeClassFilter(LinkTag.class);
            Parser parser = new Parser();
            //parser.setURL("http://www.google.com");
            parser.setURL("http://www.baidu.com");
            parser.setEncoding(parser.getEncoding());
            NodeList list = parser.extractAllNodesThatMatch(filter);
            for (int i = 0; i < list.size(); i++) {
                LinkTag node = (LinkTag) list.elementAt(i);
                logger.fatal("testLinkTag() Link is :" + node.getLink() + "==" + node.getLinkText());
                logger.fatal("testLinkTag() Link is :" + node.extractLink());
            }
        } catch (Exception e) {
            e.printStackTrace();
        }

    }

    /*
     *   <link href=" text=’text/css’ rel=’stylesheet’ />  
     */
    public void testLinkCSS() 
    {
        try
        {
            Parser parser = new Parser();
            parser.setInputHTML("<head><title>Link Test</title>" + "<link href=’/test01/css.css’ text=’text/css’ rel=’stylesheet’ />"
                    + "<link href=’/test02/css.css’ text=’text/css’ rel=’stylesheet’ />" + "</head>" + "<body>");
            parser.setEncoding(parser.getEncoding());
            NodeList nodeList = null;

            for (NodeIterator e = parser.elements(); e.hasMoreNodes();)
            {
                Node node = e.nextNode();
                logger.fatal("testLinkCSS()" + node.getText() + node.getClass());
            }
        } catch (Exception e)
        {
            e.printStackTrace();
        }
    }

    /*
     *   OrFilter   
     */
    public void testOrFilter() {
        NodeFilter inputFilter = new NodeClassFilter(InputTag.class);
        NodeFilter selectFilter = new NodeClassFilter(SelectTag.class);
        Parser myParser;
        NodeList nodeList = null;

        try {
            Parser parser = new Parser();
            parser.setInputHTML("<head><title>OrFilter Test</title>" + "<link href=’/test01/css.css’ text=’text/css’ rel=’stylesheet’ />"
                    + "<link href=’/test02/css.css’ text=’text/css’ rel=’stylesheet’ />" + "</head>" + "<body>"
                    + "<input type=’text’ value=’text1′ name=’text1′/>" + "<input type=’text’ value=’text2′ name=’text2′/>"
                    + "<select><option id=’1′>1</option><option id=’2′>2</option><option id=’3′></option></select>"
                    + "<a href=’http:// www.yeeach.com’>yeeach.com</a>" + "</body>");

            parser.setEncoding(parser.getEncoding());
            OrFilter lastFilter = new OrFilter();
            lastFilter.setPredicates(new NodeFilter[] { selectFilter, inputFilter });
            nodeList = parser.parse(lastFilter);
            for (int i = 0; i <= nodeList.size(); i++) {
                if (nodeList.elementAt(i) instanceof InputTag) {
                    InputTag tag = (InputTag) nodeList.elementAt(i);
                    logger.fatal("OrFilter tag name is :" + tag.getTagName() + " ,tag value is:" + tag.getAttribute("value"));
                }
                if (nodeList.elementAt(i) instanceof SelectTag) {
                    SelectTag tag = (SelectTag) nodeList.elementAt(i);
                    NodeList list = tag.getChildren();

                    for (int j = 0; j < list.size(); j++) {
                        OptionTag option = (OptionTag) list.elementAt(j);
                        logger.fatal("OrFilter Option" + option.getOptionText());
                    }

                }
            }

        } catch (ParserException e) {
            e.printStackTrace();
        }
    }

    /*
     *    <table><tr><td></td></tr></table>   
     */
    public void testTable() 
    {
        Parser myParser;
        NodeList nodeList = null;
        myParser = Parser.createParser("<body> " + "<table id=’table1′ >" + "<tr><td>1-11</td><td>1-12</td><td>1-13</td>"
                + "<tr><td>1-21</td><td>1-22</td><td>1-23</td>" + "<tr><td>1-31</td><td>1-32</td><td>1-33</td></table>"
                + "<table id=’table2′ >" + "<tr><td>2-11</td><td>2-12</td><td>2-13</td>" + "<tr><td>2-21</td><td>2-22</td><td>2-23</td>"
                + "<tr><td>2-31</td><td>2-32</td><td>2-33</td></table>" + "</body>", "GBK");
        NodeFilter tableFilter = new NodeClassFilter(TableTag.class);
        OrFilter lastFilter = new OrFilter();
        lastFilter.setPredicates(new NodeFilter[] { tableFilter });
        try 
        {
            nodeList = myParser.parse(lastFilter);
            for (int i = 0; i <= nodeList.size(); i++) 
            {
                if (nodeList.elementAt(i) instanceof TableTag)
                {
                    TableTag tag = (TableTag) nodeList.elementAt(i);
                    TableRow[] rows = tag.getRows();
                    for (int j = 0; j < rows.length; j++) 
                    {
                        TableRow tr = (TableRow) rows[j];
                        TableColumn[] td = tr.getColumns();
                        for (int k = 0; k < td.length; k++)
                        {
                            logger.fatal("td[k].toPlainTextString() = " + td[k].toPlainTextString());
                        }
                    }
                }
            }
        } catch (ParserException e) 
        {
            e.printStackTrace();
        }
    }

    /*
     *   NodeVisitor   ,      
     */
    public void testVisitorAll() 
    {
        try
        {
            Parser parser = new Parser();
            parser.setURL("http://www.google.com");
            parser.setEncoding(parser.getEncoding());
            NodeVisitor visitor = new NodeVisitor() 
            {
                public void visitTag(Tag tag) 
                {
                    logger.fatal("testVisitorAll() Tag name is :" + tag.getTagName() + " 
Class is :" + tag.getClass()); logger.fatal("Tag.toHtml() = " + tag.toHtml()); } }; parser.visitAllNodesWith(visitor); } catch (ParserException e) { e.printStackTrace(); } } /* * Tag NodeVisitor */ public void testTagVisitor() { try { Parser parser = new Parser("<head><title>dddd</title>" + "<link href=’/test01/css.css’ text=’text/css’ rel=’stylesheet’ />" + "<link href=’/test02/css.css’ text=’text/css’ rel=’stylesheet’ />" + "</head>" + "<body>" + "<a href=’http://www.yeeach.com’>yeeach.com</a>" + "</body>"); NodeVisitor visitor = new NodeVisitor() { public void visitTag(Tag tag) { if (tag instanceof HeadTag) { logger.fatal("visitTag() HeadTag : Tag name is :" + tag.getTagName() + "
Class is :" + tag.getClass() + "
Text is :" + tag.getText()); } else if (tag instanceof TitleTag) { logger.fatal("visitTag() TitleTag : Tag name is :" + tag.getTagName() + "
Class is :" + tag.getClass() + "
Text is :" + tag.getText()); } else if (tag instanceof LinkTag) { logger.fatal("visitTag() LinkTag : Tag name is :" + tag.getTagName() + "
Class is :" + tag.getClass() + "
Text is :" + tag.getText() + "
getAttribute is :" + tag.getAttribute("href")); } else { logger.fatal("visitTag() : Tag name is :" + tag.getTagName() + "
Class is :" + tag.getClass() + "
Text is :" + tag.getText()); } } }; parser.visitAllNodesWith(visitor); } catch (Exception e) { e.printStackTrace(); } } /* * HtmlPage */ public void testHtmlPage() { String inputHTML = "<html>" + "<head>" + "<title>Welcome to the HTMLParser website</title>" + "</head>" + "<body>" + "Welcome to HTMLParser" + "<table id=’table1′ >" + "<tr><td>1-11</td><td>1-12</td><td>1-13</td>" + "<tr><td>1-21</td><td>1-22</td><td>1-23</td>" + "<tr><td>1-31</td><td>1-32</td><td>1-33</td></table>" + "<table id=’table2′ >" + "<tr><td>2-11</td><td>2-12</td><td>2-13</td>" + "<tr><td>2-21</td><td>2-22</td><td>2-23</td>" + "<tr><td>2-31</td><td>2-32</td><td>2-33</td></table>" + "</body>" + "</html>"; Parser parser = new Parser(); try { parser.setInputHTML(inputHTML); parser.setEncoding(parser.getURL()); HtmlPage page = new HtmlPage(parser); parser.visitAllNodesWith(page); logger.fatal("testHtmlPage -title is :" + page.getTitle()); NodeList list = page.getBody(); for (NodeIterator iterator = list.elements(); iterator.hasMoreNodes();) { Node node = iterator.nextNode(); logger.fatal("testHtmlPage -node is :" + node.toHtml()); } } catch (ParserException e) { // TODO Auto-generated catch block e.printStackTrace(); } } /* * LinkBean */ public void testLinkBean() { Parser parser = new Parser(); LinkBean linkBean = new LinkBean(); linkBean.setURL("http:// www.google.com"); URL[] urls = linkBean.getLinks(); for (int i = 0; i < urls.length; i++) { URL url = urls[i]; logger.fatal("testLinkBean() -url is :" + url); } } }