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

htmlparser的使用样例

    博客分类:
  • JAVA
阅读更多
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() + " \n 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() + " \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);
        }

    }

}

 

分享到:
评论

相关推荐

    HTMLParser 使用举例

    HTMLParser 使用举例 HTMLParser 是一个开源的类库,用于解析 Web 页面。它有两种主要使用方式:extraction 和 transformation。前者用于从网页中萃取出需要的内容,后者用于把 Web 页面中的内容转换为需要的格式。...

    HTMLParser使用文档和jar包

    本篇将详细阐述HTMLParser的使用方法、功能以及提供的相关资源。 首先,`HTMLParser-2.0-SNAPSHOT-doc.zip`包含了HTMLParser的使用文档。这份文档通常包含API参考、教程、示例代码和用户指南,是学习和理解...

    JAVA htmlparser 使用实例

    ### JAVA HtmlParser 使用实例详解 在Java开发过程中,解析HTML文档是一项常见的需求,尤其是在处理Web爬虫、数据抓取等应用场景时。`HtmlParser`库为开发者提供了一种简便的方式来解析HTML文档,并从中提取所需的...

    C# HtmlParser使用小实例

    通过阅读提供的`C# HtmlParser使用实例.doc`文档,你可以深入了解如何利用这个库来满足你的具体需求。同时,`winsta.Htmlparser.chm`帮助文档是宝贵的参考资料,包含了详细的API说明和技术细节。记住,理解并熟练...

    htmlparser使用简单讲解

    以下是一个使用HTMLParser的简单示例,展示了如何从文件或URL读取HTML内容并进行解析: ```java import java.io.BufferedReader; import java.io.InputStreamReader; import java.io.FileInputStream; import java....

    HTMLParser.net源代码HTMLParser.net使用demo

    本项目名为"HTMLParser.net源代码HTMLParser.net使用demo",显然是一个包含示例代码的压缩包,用于展示如何在实际应用中使用HTMLParser.net。 HTMLParser.net的核心功能包括: 1. **HTML解析**:它能够将HTML字符...

    HTMLParser 使用文档、jar包、以及源码

    1. **例子.txt**:这是一个包含使用HTMLParser库的实际示例代码的文本文件。开发者可以通过阅读和运行这些示例来快速理解如何在自己的项目中应用HTMLParser。 2. **HTMLParser-2.0-SNAPSHOT-doc.zip**:这是...

    网络爬虫 HTMLParser 使用指南

    综上所述,网络爬虫开发者在使用HTMLParser进行开发时,需要了解它的基本原理、核心类和构造函数、调试工具的使用、页面编码设置方法、以及一些基本的代码实践。同时,开发者应该具备良好的问题解决和代码调试能力,...

    Java正则表达式入门 + HTMLParser使用详解

    除了正则表达式,本话题还提到了HTMLParser的使用。HTMLParser是一个Java库,用于解析HTML文档,提取或修改数据。它可以处理HTML标签、属性、文本等内容,对网页内容进行分析和操作。使用HTMLParser,开发者可以方便...

    htmlparser 使用指南 入门 必读htmlparser 使用指南 入门 必读htmlparser 使用指南 入门 必读

    HTMLParser的核心使用场景主要有两个:提取(extraction)和转换(transformation)。提取是指从网页中抽取数据,而转换则是指修改或创建新的HTML内容。1.4版本的HTMLParser在转换领域有了显著的改进,简化了标签的创建...

    解析htmlparser的所有jar包

    5. **兼容性与扩展性**:HTMLParser与其他Java库兼容良好,如JDOM、DOM4J等,可以方便地与其他XML处理工具结合使用。此外,它的API设计使得扩展功能相对简单。 6. **错误处理**:HTMLParser具有一定的容错能力,...

    HTMLParser使用详解.doc

    本文将介绍如何使用 HTMLParser 并提供一些基础的使用示例。 首先,`Parser` 类是 HTMLParser 库的核心,负责解析 HTML 页面。它提供了多个构造函数,以适应不同的初始化方式: 1. `public Parser ()`: 创建一个...

    HTMLParser使用详解

    在本文中,我们将深入探讨HTMLParser的使用,包括其核心类`Parser`以及如何初始化和使用它。 首先,`Parser`是HTMLParser库的核心组件,它负责解析HTML页面。`Parser`类提供了多个构造函数,以适应不同的初始化需求...

    htmlparser

    META-INF/maven/org.htmlparser/htmlparser/pom.properties META-INF/maven/org.htmlparser/htmlparser/pom.xml org.htmlparser.Parser.class org.htmlparser.PrototypicalNodeFactory.class org.htmlparser.beans....

    htmlparser的jar包

    在实际开发中,使用HTMLParser时,你可能需要处理一些常见的问题,比如CSS选择器的支持、JavaScript的解析、URL的处理等。虽然HTMLParser本身并不直接提供这些功能,但可以通过扩展其API或者与其他库(如Jsoup)结合...

    htmlparser.jar文件

    在实际使用HTMLParser时,首先需要在项目中引入这些jar包,然后可以通过创建Parser对象来解析HTML字符串或者文件。例如: ```java import org.htmlparser.Parser; import org.htmlparser.util.ParserException; ...

    c#版htmlparser htmlparser.dll htmlparser源代码

    `htmlparser.dll`是这个库的动态链接库文件,它包含了编译好的类和方法,可以直接在C#项目中引用以使用HTMLParser的功能。在C#项目中,我们可以通过添加对dll的引用来调用库中的方法,比如解析HTML字符串、查找特定...

    htmlparser网页分析

    4. 使用示例:在"HTMLParser使用详解-Node内容.doc"中,可能详细介绍了如何创建和配置解析器对象,设置解析事件处理器,以及如何通过遍历节点来提取或修改HTML内容。例如,可以使用`TagStart`事件捕获元素开始,`...

Global site tag (gtag.js) - Google Analytics