`
yjgyjg4
  • 浏览: 118954 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

Html Parser

    博客分类:
  • java
阅读更多
/*
    * 测试对<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>" + 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() + " \n Class is :"
                    + tag.getClass());
                }
            };
            parser.visitAllNodesWith(visitor);
        } catch (ParserException e) {
            e.printStackTrace();
        }
    }
    /*
    * 测试对指定Tag的NodeVisitor的用法
    */
    public void testTagVisitor() {
        try {
            Parser parser = new Parser(
                "<head><title>dddd</title>"
                + "<link href=http://www.yeeach.com/’/test01/css.css’ text=’text/css’ rel=’stylesheet’ />"
                + "<link href=http://www.yeeach.com/’/test02/css.css’ text=’text/css’ rel=’stylesheet’ />"
                + "</head>" + "<body>"
                + "<a href=http://www.yeeach.com/’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() + " \n Class is :"
                        + tag.getClass() + "\n Text is :"
                        + tag.getText());
                    } else if (tag instanceof TitleTag) {
                        logger.fatal("visitTag() TitleTag : Tag name is :"
                        + tag.getTagName() + " \n Class is :"
                        + tag.getClass() + "\n Text is :"
                        + tag.getText());
                    } else if (tag instanceof LinkTag) {
                        logger.fatal("visitTag() LinkTag : Tag name is :"
                        + tag.getTagName() + " \n Class is :"
                        + tag.getClass() + "\n Text is :"
                        + tag.getText() + " \n getAttribute is :"
                        + tag.getAttribute("href"));
                    } else {
                        logger.fatal("visitTag() : Tag name is :"
                        + tag.getTagName() + " \n Class is :"
                        + tag.getClass() + "\n 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);
        }
    }

   }

引用
另外一种

public class ParserTestCase extends TestCase {
    private static final Logger logger = Logger.getLogger(ParserTestCase.class);

    public ParserTestCase(String name) {
        super(name);
     }
    /*
     * 测试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.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.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=http://www.yeeach.com/’/test01/css.css’ text=’text/css’ rel=’stylesheet’ />"
            + "<link href=http://www.yeeach.com/’/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=http://www.yeeach.com/’/test01/css.css’ text=’text/css’ rel=’stylesheet’ />"
            + "<link href=http://www.yeeach.com/’/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/’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();
         }
     }
    
   }
分享到:
评论

相关推荐

    html parser 应用ie的内置parser可以解析动态脚本html

    标题提到的"html parser 应用ie的内置parser可以解析动态脚本html",意味着我们将讨论如何利用MSHTML库,这个库是Internet Explorer的核心组件,支持HTML、CSS、JavaScript等网页技术,因此能够处理包含动态脚本的...

    HTML parser选型测试

    在“HTML parser选型测试”这个主题中,博主可能分享了他在选择适合项目需求的HTML解析器时的经验和测试结果。在源码和工具的标签下,我们可以推测这篇博文可能涉及到了代码实现和实际应用工具的比较。 首先,HTML...

    jericho html Parser

    **jericho HTML Parser** 是一个Java库,专门用于解析HTML文档。它被设计用来处理不规范的HTML,即那些在语法上可能不完全符合HTML标准的实际网页。在处理这种复杂性和不可预测性方面,jericho HTML Parser表现出了...

    android html parser

    "Android HTML Parser" 是一个专为Android平台设计的库,它允许开发者高效地解析和提取HTML文档中的信息。这个库的存在使得在手机上分析网页内容变得更为简便,能够帮助开发者快速定位到他们感兴趣的元素。 HTML ...

    python html parser

    Python HTML Parser是一个强大的工具,用于在Python环境中解析HTML和XML文档。这个库使得开发者能够方便地提取和操作网页上的数据,特别是在进行网络爬虫或数据挖掘项目时非常有用。本篇将详细介绍Python中的...

    HTML-Parser-3.51.rar_html parser_parser perl_perl html

    `HTML-Parser`是Perl中一个专门用于解析HTML的模块,它使得程序员能够有效地解析和操作HTML文档。 标题中的"HTML-Parser-3.51.rar"表明这是一个关于HTML-Parser 3.51版本的压缩包,通常包含了该模块的源代码、文档...

    html_parser.zip_Parser_html_html parser_html_parser_zip

    在给定的"html_parser.zip"压缩包中,我们可以推测包含了一个使用Delphi7或Delphi XE2编写的HTML解析库或者示例代码。Delphi是一种强大的Object Pascal编程环境,常用于开发Windows应用程序。 HTML解析器的核心功能...

    html_parser.rar_Parser_delphi html parser_html parser

    本压缩包"html_parser.rar"包含了一个用Delphi语言编写的HTML解析器,它利用了汇编内联技术来提高性能。Delphi是一种基于Object Pascal的高效能、面向对象的编程语言,常用于开发Windows桌面应用。 在解析HTML时,...

    html parser

    HTML解析器是用于处理HTML(超文本标记语言)文档的工具,它能够解析网页内容,提取其中的结构、数据和元信息。在编程领域,HTML解析通常涉及到编程语言中的库或框架,例如Java中的Jsoup或者XML解析库。本文将深入...

    JerichoHtmlParser使用介绍.pdf

    Jericho Html Parser 是一个在 SourceForge 上非常受欢迎的开源HTML解析库,专为处理复杂的HTML文档设计。这个库因其高效和强大的解析能力而备受推崇,尤其是在处理非结构化或不规则的网页时。本文将深入探讨如何...

    HTML Parser

    org.htmlparser.Parser org.htmlparser.Remark org.htmlparser.tags.Div org.htmlparser.Attribute org.htmlparser.tags.Html org.htmlparser.tags.Span org.htmlparser.NodeFilter org.htmlparser.lexer.Page org....

    PHP HTML parser-开源

    PHP HTML parser是一款开源的PHP库,专为解析HTML文档而设计。这个解析器使得开发者能够从PHP脚本中高效地处理和操作HTML内容,从而实现网页抓取、数据提取或者DOM操作等各种功能。本文将深入探讨这款解析器的关键...

    HTML parser in Delphi:Delphi类,具有读取和解析HTML文件的功能-开源

    THTMLdom是(Delphi)类,具有读取HTML源文件并将其分解为THTMLelement树的功能。 HTML标签的属性存储在元素中。 提供了用于根据属性值或标签名称选择元素的功能。 可以显示树的结构,并且可以将其呈现为纯文本。 ...

    Jericho HTML Parser-开源

    ** Jericho HTML Parser 简介 ** Jericho HTML Parser 是一个专为Java开发者设计的开源库,主要用于解析和操作HTML文档。这个库的核心特性在于它能够处理不规范的HTML,即使遇到错误或非标准的标记,也能尽可能地...

    Kanna(鉋) is an XML_HTML parser for Swift.zip

    《Kanna:Swift中的XML与HTML解析库》 在Swift编程语言中,处理XML和HTML文档是一项常见的任务,尤其在构建iOS、macOS应用程序时,可能需要从网页中提取数据或者解析XML格式的数据源。Kanna,这个源自日本古老神话...

    zhizhu.zip_Java spider_Simple HTML parser_spider

    一个基于Java的web spider框架.它包含一个简单的HTML剖析器能够分析包含HTML内容的输入流.通过实现Arachnid的子类就能够开发一个简单的Web spiders并能够在Web站上的每个页面被解析之后增加几行代码调用。

Global site tag (gtag.js) - Google Analytics