`
yxgyh
  • 浏览: 279695 次
  • 性别: 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的网页分析器。这是一个Java库,专门用于解析HTML文档,帮助开发者处理和操作HTML元素。通过htmlparser,我们可以方便地遍历HTML文档的DOM树,对每个节点进行分析,找出可能包含...

    parse5:从inikulinparse5移植但针对Deno

    该项目是来自以下国家的港口: 解析5 parse5-htmlparser2-tree-adapter 来自inikulin / parse5 v6.0.1的模块。 未移植与Node的流api有关的其他模块。为什么? 它在浏览器中本地运行。 它与Deno一起使用。 它是纯...

    毕业设计-程序 思创兼职V6.6.5 全开源版-整站商业源码.zip

    毕业设计-程序 思创兼职V6.6.5 全开源版-整站商业源码.zip

    配电网电压与无功优化协调:基于二阶锥规划的多目标函数及场景分析

    内容概要:本文探讨了配电网电压与无功协调优化的问题,旨在通过优化手段最小化运行成本并减少电压偏差。文中介绍了目标函数的构成,包括开关动作成本、功率损耗成本和设备运行成本,并提出了将非凸模型转化为二阶锥规划模型的方法。通过优化变压器分接头位置、电容器接入组数以及SOP的输出功率,实现了电压与无功的有效控制。此外,还对不同场景进行了对比分析,验证了优化策略的效果。 适合人群:从事电力系统研究、配电网管理和优化的专业人士,以及对电力系统优化感兴趣的学者和技术人员。 使用场景及目标:适用于希望深入了解配电网电压与无功协调优化的技术人员,帮助他们掌握优化策略的具体应用,提升电网运行效率和稳定性。 其他说明:文章不仅提供了理论分析,还涉及了具体的模型构建和优化算法实现,有助于读者全面理解配电网优化的实际操作流程。

    毕业设计-红包拓客生意宝V1.6.44 开源版-整站商业源码.zip

    毕业设计-红包拓客生意宝V1.6.44 开源版-整站商业源码.zip

    外转子无刷直流电机温度场特性分析与瞬态热仿真的关键技术及应用

    内容概要:本文详细探讨了外转子无刷直流电机在不同应用场景(如无人机、电动车轮毂)中的温度场特性及其瞬态热仿真方法。首先介绍了电机的主要热源(铜损和铁损),并通过Python代码实现了铜损的精确计算。接着讨论了建模过程中散热边界的设定,特别是在外转子结构中利用ANSYS Fluent进行风冷仿真时需要注意的问题。文中还强调了对流换热系数的合理估算以及瞬态仿真中时间步长的优化设置。最后,通过Python后处理工具生成温度变化曲线,并提供了仿真结果与实际情况不符时的排查建议。 适合人群:从事电机设计、制造及相关领域的工程师和技术人员,尤其是对外转子无刷直流电机感兴趣的研究人员。 使用场景及目标:适用于需要深入了解外转子无刷直流电机温度特性和掌握相关热仿真技能的专业人士。目标是提高电机设计的可靠性和性能,避免因温度过高导致的安全隐患。 其他说明:文章不仅提供了理论分析,还包括具体的代码实现和实践经验分享,有助于读者更好地理解和应用所学知识。

    音乐领域千千阙歌词分析:探讨离别情感与回忆的美好表达方式设计

    内容概要:《千千阙歌》是一首表达离别之情的歌曲,歌词描绘了一对恋人即将分离的情景。歌词中充满了对过去美好时光的回忆和对未来重逢的期待,表达了主人公在离别时刻的复杂情感。通过“红红仍是你,赠我的心中艳阳”、“来日纵使千千阕歌,飘于远方我路上”等诗句,传达了即使未来有再多美好的事物,也无法替代此刻与对方共度的美好时光。歌词反复强调“都比不起这宵美丽”,突出了今夜的独特性和珍贵性。; 适合人群:喜欢抒情歌曲或对离别主题感兴趣的听众。; 使用场景及目标:①适合在离别、感伤的场合播放;②用于表达对过去美好时光的怀念;③适用于想要感受深刻情感共鸣的人群。; 阅读建议:这首歌的歌词富有诗意,情感细腻,建议在安静的环境下聆听,细细品味歌词中蕴含的情感,感受那份对美好时光的留恋与不舍。

    实训商业源码-果蔬识别1.0.4-论文模板.zip

    实训商业源码-果蔬识别1.0.4-论文模板.zip

    毕业设计-oa办公-整站商业源码.zip

    毕业设计-oa办公-整站商业源码.zip

    实训商业源码-柚家政6.1.0+分销插件 1.0.2-论文模板.zip

    实训商业源码-柚家政6.1.0+分销插件 1.0.2-论文模板.zip

    毕业设计-付费阅读5.3.9公众号H5版-整站商业源码.zip

    毕业设计-付费阅读5.3.9公众号H5版-整站商业源码.zip

    MPU6050姿态角解算:二维卡尔曼滤波与DMP引擎方法解析及其应用

    内容概要:本文详细介绍了MPU6050姿态角解算程序的两种主要方法——二维卡尔曼滤波和自带DMP引擎。首先阐述了传感器技术的发展背景下,姿态角解算的重要性和必要性。接着分别讲解了二维卡尔曼滤波的原理、实现步骤以及其特点,强调了它在处理环境噪声和测量噪声方面的优势。然后讨论了自带DMP引擎的姿态角解算程序,指出其直接优化的方式和适用于高精度、实时性强的应用场景。最后总结了两种方法的选择依据,并展望了未来的发展趋势。 适合人群:从事嵌入式系统开发、机器人工程、自动化控制等领域并对姿态角解算感兴趣的工程师和技术爱好者。 使用场景及目标:帮助开发者理解并选择最适合自身项目的姿态角解算方法,特别是在无人驾驶、无人机飞行控制等对精度和实时性有较高要求的应用场景中。 其他说明:文中不仅提供了理论知识,还涉及到了具体的实现细节,有助于读者更好地理解和应用相关技术。

    MATLAB仿真实现Chan法计算TDOA与GDOP评估——无线定位技术研究

    内容概要:本文详细介绍了使用MATLAB进行无线定位技术的研究,重点在于利用Chan法计算TDOA(到达时间差)和GDOP(几何精度稀释因子)。首先解释了TDOA的概念及其在无线定位系统中的重要性,展示了如何通过MATLAB代码实现Chan法计算TDOA的具体步骤。接着阐述了GDOP作为衡量定位系统几何精度的重要指标,演示了不同接收器和信号源位置下GDOP值的计算方法。最后,通过对仿真结果的分析,加深了对无线定位技术原理的理解,并指出了实践中可能遇到的问题和挑战。 适合人群:对无线定位技术和MATLAB有一定了解的研发人员和技术爱好者。 使用场景及目标:适用于需要深入了解TDOA和GDOP计算原理的研究人员,以及希望通过MATLAB仿真提升实践技能的学习者。 其他说明:文中提供了详细的MATLAB代码片段,帮助读者更好地理解和复现实验过程。同时强调了理论与实践相结合的重要性,鼓励读者尝试调整参数以获得更深的理解。

    毕业论文-烟雨图床v2.1.3正式版源码-整站商业源码.zip

    毕业论文-烟雨图床v2.1.3正式版源码-整站商业源码.zip

    毕业论文-智云物业2.3.9-整站商业源码.zip

    毕业论文-智云物业2.3.9-整站商业源码.zip

    实训商业源码-砍价宝7.2.0开源-论文模板.zip

    实训商业源码-砍价宝7.2.0开源-论文模板.zip

    实训商业源码-超人名片小程序2.0.3 原版-论文模板.zip

    实训商业源码-超人名片小程序2.0.3 原版-论文模板.zip

    异步电机矢量控制技术解析:基于DSP、MCU的FOC实现及转子磁场定向控制

    内容概要:本文深入探讨了异步电机的矢量控制技术,特别是Field Oriented Control (FOC) 和转子磁场定向控制。文章介绍了三种不同的FOC实现方案:基于DSP的高精度控制系统、基于MCU的经济实用系统以及详细的Word文档说明。每种方案都包含了具体的代码片段和技术细节,展示了如何通过空间矢量脉宽调制(SVPWM) 实现电机电流的精确控制。此外,还讨论了转子磁场定向控制的关键技术和应用场景,如工业自动化、机器人和电动汽车等。最后,文章总结了这些系统的出色控制效果,并展望了未来的发展方向。 适合人群:电气工程专业学生、电机控制领域的工程师和技术爱好者。 使用场景及目标:适用于希望深入了解异步电机矢量控制技术的专业人士,旨在帮助他们掌握FOC的具体实现方法和应用场景,提高电机控制的精度和效率。 其他说明:文中提供的代码片段和技术细节有助于读者更好地理解和实践FOC系统的设计与实现。

    永磁同步电机二阶线性与非线性自抗扰控制器(ADRC)的Matlab与Simulink建模及三阶观测器研究

    内容概要:本文深入探讨了永磁同步电机的二阶线性模型及其与非线性自抗扰控制器(ADRC)的结合。首先介绍了永磁同步电机的二阶线性模型,通过微分方程描述电机的关键参数与其机械运动状态的关系。接着阐述了ADRC作为一种先进控制算法,在抑制电机高速运转时的振动和噪声方面的作用。随后讨论了Matlab和Simulink在构建模型和仿真中的应用,使研究人员可以实时观察和调整电机的运行状态。最后引入了三阶观测器,用于提高系统性能和稳定性,提供更准确的状态变量反馈。文中还列举了一些相关领域的权威文献和资料,帮助读者深入了解这一主题。 适合人群:对电机控制系统感兴趣的科研人员、工程师和技术爱好者。 使用场景及目标:适用于需要理解和掌握永磁同步电机控制策略的研究人员,特别是那些希望利用Matlab和Simulink进行建模和仿真的技术人员。目标是提升对永磁同步电机及其控制策略的理解,增强实际工程应用能力。 其他说明:文中提供的示例代码仅作示意,具体实现需根据实际情况调整。此外,文中引用的相关文献有助于读者进一步深入研究。

    抽水蓄能电站最优调度方案研究:基于粒子群算法的混合发电系统经济调度模型

    内容概要:本文详细探讨了抽水蓄能电站在电力系统中的调峰填谷功能,以及如何利用粒子群算法优化其调度策略。文章首先介绍了抽水蓄能电站在电力需求高峰和低谷时的不同角色,强调其对电网稳定性和经济效益的重要性。接着,结合各类电源的调峰电价机制,提出了一个以成本最低为目标的混合发电系统调峰经济调度模型。随后,引入粒子群算法作为优化工具,通过模拟自然群体行为,在解空间中搜索最优解,从而找到最佳调度方案。最后,通过MATLAB仿真验证了该模型的有效性,证明其能在保证电网稳定的同时实现成本最小化。 适合人群:从事电力系统研究、调度管理的专业人士,以及对智能调度技术和粒子群算法感兴趣的科研人员。 使用场景及目标:适用于需要优化抽水蓄能电站调度策略的研究机构和企业,旨在提高电网稳定性并降低成本。 其他说明:随着绿色能源的快速发展和智能电网的推进,抽水蓄能电站在未来将发挥更重要的作用,因此该研究对未来能源发展具有指导意义。

Global site tag (gtag.js) - Google Analytics