htmlparser

有些时候我们想要抓取网上上的信息,然后对网页上信息进行提取,得到我们想要的数据,这时候我们可以用HtmlParser进行信息提取。下面介绍一下在项目中常用到的HtmlParser的一些用法:

1.       ObjectFindVisitor用法

例子如下: 查询出TABLE节点

package com;

import org.htmlparser.Node;

import org.htmlparser.Parser;

import org.htmlparser.tags.TableTag;

import org.htmlparser.visitors.ObjectFindingVisitor;

public class T{  

    public static void main(String[] args){

       System.out.println(testObjectFindVisitor());

    }

    /*

    * 测试ObjectFindVisitor的用法

    */ 

    public static String testObjectFindVisitor() { 

       String result ="";

       try { 

              //要解析的文件

             Parser parser = new Parser ("test.html");  

             //设置编码集

             parser.setEncoding("UTF-8");

             //取得TableTag节点 (TableTag.class)

ObjectFindingVisitor visitorTable = new ObjectFindingVisitor(TableTag.class);             

             parser.visitAllNodesWith(visitorTable);    

             Node[] nodesTable = visitorTable.getTags();         

             for (int i = 0; i < nodesTable.length; i++) { 

                TableTag tableTag = (TableTag) nodesTable[i]; 

                result = tableTag.toString();

             }             

             /**

              * 另外还有一些其它的节点类

              * ImageTag :图片

              * Div div

              * BodyTag body部分

              * FormTag :表单

              * HeadTag HEAD部分

              * FrameTag 等等               *

              */            

       }catch (Exception e) { 

           e.printStackTrace(); 

       } 

        return result;         

    }

  

}

Test.html中的内容为;

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html>

  <head>

    <title>test.html</title>   

  </head> 

  <body>

   <table>

   <tr>

        <th>用户名</th>

        <th>所属公司</th>     

   </tr>

   <tr>

        <td><a href="http://test1.com">test1</a></td>    

        <td>test1公司</td>       

   </tr>

   <tr>

        <td><a href="http://test2.com">test2</a></td>       

        <td>test2公司</td>    

   </tr>

   </table>

  </body>

</html>

 

打印结果为:

TableTag

********

<table>

   <tr>

        <th>用户名</th>

        <th>所属公司</th>     

   </tr>

   <tr>

        <td><a href="http://test1.com">test1</a></td>    

        <td>test1公司</td>       

   </tr>

   <tr>

        <td><a href="http://test2.com">test2</a></td>       

        <td>test2公司</td>    

   </tr>

   </table>

 

2. NodeClassFilter用法(和上面的输入结果一样)

/*

* 测试NodeClassFilter用法(过滤得到我们要的节点)

*/ 

public static void testNodeClassFilter() { 

try {     

       //得到Table节点数据

           NodeFilter filter = new NodeClassFilter(TableTag.class); 

           Parser parser = new Parser (test.html"); 

           parser.setEncoding("UTF-8");             

           NodeList list = parser.extractAllNodesThatMatch(filter); 

           Node[] nodes = list.toNodeArray();

           for (int i = 0; i < nodes.length; i++) { 

                  TableTag table = (TableTag) nodes[i];

                 System.out.println(table.toString());

           } 

} catch (Exception e) { 

        e.printStackTrace(); 

}     

} 

3         OrFilter的用法, 联合ObjectFindVisitorNodeClassFilter使用

例如:查找出TABLE然后,提取里面的文本和链接,放入到User对象中

User.java

package com;

public class User {

    //用户名

    String name ="";

    /**

* 详情(我们一般不这么放,这里只是一个例子,一般这个都是附件等的一些地址,这里就不做特殊处理)

     */

    String href ="";

    //公司

    String company="";

    public String getCompany() {

       return company;

    }

    public void setCompany(String company) {

       this.company = company;

    }

    public String getHref() {

       return href;

    }

    public void setHref(String href) {

       this.href = href;

    }

    public String getName() {

       return name;

    }

    public void setName(String name) {

       this.name = name;

    }

}

处理类

/**

* OrFilter的用法

* 联合ObjectFindVisitorNodeClassFilter使用

*

* @return

*/

 public static List<User> getUserList(){

    List<User> userlist = new ArrayList<User>();

    try{             

       ObjectFindingVisitor visitor = new                    ObjectFindingVisitor(TableTag.class);

       Parser parser = new Parser ("test.html");

       parser.setEncoding("UTF-8");

       parser.visitAllNodesWith(visitor);

       Node[] nodes = visitor.getTags();

       String content ="";

       for (int i = 0; i < nodes.length; i++) {

           TableTag tableTag = (TableTag) nodes[i];               

           if (tableTag.toString().indexOf("TableTag")>=0 ){

              content = tableTag.toString();               

              content = content.trim();

content=content.substring(content.indexOf("<table>"),content.indexOf("</table>"));

              break;

           }

       }            

       List list = new ArrayList();

       //上半部分是用ObjectFindingVisitor,提取出TABLE

       //---------------------------------------------

       //下半部分是用OrFilterNodeClassFilter提取出文本和链接内容

if (!content.equals("")){

       NodeList nodeList = null;

       Parser myParser = Parser.createParser(content, "UTF-8");

       //文本内容

       NodeFilter textFilter = new NodeClassFilter(TextNode.class);

       //链接内容

       NodeFilter linkFilter = new NodeClassFilter(LinkTag.class);

       OrFilter filter = new OrFilter();

filter.setPredicates(new NodeFilter[] { textFilter, linkFilter });

       nodeList = myParser.parse(filter);

       //取得所有的文本和链接节点

       Node[] d_nodes = nodeList.toNodeArray(); 

       for (int i = 0; i < d_nodes.length; i++){

           //标记为文本内容

           String d_biaoshi = "T:";

           Node d_anode = (Node) d_nodes[i];

           String d_line = "";                   

           if (d_anode instanceof TextNode){

              TextNode d_textnode = (TextNode) d_anode;

              d_line = d_textnode.getText();

           }else if (d_anode instanceof LinkTag){

              LinkTag d_linknode = (LinkTag) d_anode;

              d_line = d_linknode.getLink();

              //标记为链接内容

              d_biaoshi = "L:";                 

}                         if(d_line==null||"".equals(d_line.trim()))continue;

d_line=d_line.replaceAll("/n","").replaceAll("/t","").trim();

       list.add(d_biaoshi+d_line);

       }

       for(int j = 0 ;j<list.size();j++){

           String temp = (String)list.get(j);

           //链接前面的说明是表头信息,从链接开始要提取的内容

           if (temp.startsWith("L:")){                     

              User user = new User();

              user.setHref(temp.substring(2));

              //链接的下一个是名字

              j++;

              temp = (String)list.get(j);                  

              //设置名称

              user.setName(temp.substring(2));

              //名字的下一个是所属公司

              j++;

              temp = (String)list.get(j);                         

              user.setCompany(temp.substring(2));   

              userlist.add(user);

           }                   

       }          //-------------------------------------------------------          //打印出所有的用户相关信息

       for(int i = 0 ;i <userlist.size();i++){

           User user = userlist.get(i);

           System.out.println("======用户名======="+user.getName());

           System.out.println("=======链接======"+user.getHref());

           System.out.println("=======公司======"+user.getCompany());

           System.out.println("-------------------------------");

       }

    }

} catch (Exception e) {

    e.printStackTrace();

}

return userlist;

}

打印结果为:

======用户名=======test1

=======链接======http://test1.com

=======公司======test1公司

--------------------------------------------------------

======用户名=======test2

=======链接======http://test2.com

=======公司======test2公司

 

 

以上是我在项目中用的HtmlParser的用法,另外还在网上找了一些其它的用法,大体思路都是类似的。有一些其它的例子可以参考:

http://j2ee.blog.sohu.com/37474805.html

http://gcgmh.javaeye.com/blog/474093

 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
org.htmlparser.Tag org.htmlparser.Node org.htmlparser.Text 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.htmlparser.NodeFactory org.htmlparser.http.Cookie org.htmlparser.lexer.Lexer org.htmlparser.sax.Locator org.htmlparser.tags.Bullet org.htmlparser.tags.JspTag org.htmlparser.lexer.Cursor org.htmlparser.lexer.Source org.htmlparser.lexer.Stream org.htmlparser.sax.Feedback org.htmlparser.tags.BodyTag org.htmlparser.tags.FormTag org.htmlparser.tags.HeadTag org.htmlparser.tags.LinkTag org.htmlparser.tags.MetaTag org.htmlparser.nodes.TagNode org.htmlparser.sax.XMLReader org.htmlparser.tags.FrameTag org.htmlparser.tags.ImageTag org.htmlparser.tags.InputTag org.htmlparser.tags.LabelTag org.htmlparser.tags.StyleTag org.htmlparser.tags.TableRow org.htmlparser.tags.TableTag org.htmlparser.tags.TitleTag org.htmlparser.util.NodeList org.htmlparser.beans.LinkBean org.htmlparser.nodes.TextNode org.htmlparser.sax.Attributes org.htmlparser.tags.AppletTag org.htmlparser.tags.ObjectTag org.htmlparser.tags.OptionTag org.htmlparser.tags.ScriptTag org.htmlparser.tags.SelectTag org.htmlparser.util.Translate org.htmlparser.util.sort.Sort org.htmlparser.beans.BeanyBaby org.htmlparser.http.HttpHeader org.htmlparser.lexer.PageIndex org.htmlparser.tags.BulletList org.htmlparser.tags.DoctypeTag org.htmlparser.tags.HeadingTag org.htmlparser.util.NodeList$1 org.htmlparser.beans.FilterBean org.htmlparser.beans.StringBean org.htmlparser.filters.OrFilter org.htmlparser.nodes.RemarkNode org.htmlparser.scanners.Scanner org.htmlparser.tags.BaseHrefTag org.htmlparser.tags.FrameSetTag org.htmlparser.tags.TableColumn org.htmlparser.tags.TableHeader org.htmlparser.tags.TextareaTag org.htmlparser.util.ParserUtils org.htmlparser.beans.BeanyBaby$1 org.htmlparser.filters.AndFilter org.htmlparser.filters.NotFilter org.htmlparser.filters.XorFilter org.htmlparser.tags.CompositeTag org.htmlparser.tags.ParagraphTag org.htmlparser.util.IteratorImpl org.htmlparser.util.NodeIterator org.htmlparser.visitors.HtmlPage org.htmlparser.util.sort.Ordered org.htmlparser.beans.HTMLLinkBean org.htmlparser.beans.HTMLTextBean org.htmlparser.lexer.StringSource org.htmlparser.nodes.AbstractNode org.htmlparser.util.sort.Sortable org.htmlparser.filters.RegexFilter org.htmlparser.lexer.PageAttribute org.htmlparser.scanners.JspScanner org.htmlparser.scanners.TagScanner org.htmlparser.tags.DefinitionList org.htmlparser.util.NodeTreeWalker org.htmlparser.util.ParserFeedback org.htmlparser.filters.StringFilter org.htmlparser.util.FeedbackManager org.htmlparser.util.ParserException org.htmlparser.visitors.NodeVisitor org.htmlparser.filters.IsEqualFilter org.htmlparser.filters.TagNameFilter org.htmlparser.scanners.StyleScanner org.htmlparser.util.ChainedException org.htmlparser.filters.HasChildFilter org.htmlparser.http.ConnectionManager org.htmlparser.http.ConnectionMonitor org.htmlparser.scanners.ScriptDecoder org.htmlparser.scanners.ScriptScanner org.htmlparser.PrototypicalNodeFactory org.htmlparser.filters.HasParentFilter org.htmlparser.filters.LinkRegexFilter org.htmlparser.filters.NodeClassFilter org.htmlparser.lexer.InputStreamSource org.htmlparser.util.CharacterReference org.htmlparser.util.SimpleNodeIterator org.htmlparser.filters.HasSiblingFilter org.htmlparser.filters.LinkStringFilter org.htmlparser.tags.DefinitionListBullet org.htmlparser.util.CharacterReferenceEx org.htmlparser.filters.HasAttributeFilter org.htmlparser.util.DefaultParserFeedback org.htmlparser.visitors.TagFindingVisitor org.htmlparser.visitors.LinkFindingVisitor org.htmlparser.scanners.CompositeTagScanner org.htmlparser.util.EncodingChangeException org.htmlparser.visitors.UrlModifyingVisitor org.htmlparser.filters.CssSelectorNodeFilter org.htmlparser.tags.ProcessingInstructionTag org.htmlparser.visitors.ObjectFindingVisitor org.htmlparser.visitors.StringFindingVisitor org.htmlparser.visitors.TextExtractingVisitor org.htmlparser.filters.CssSelectorNodeFilter$1 org.htmlparser.parserapplications.SiteCapturer org.htmlparser.parserapplications.WikiCapturer org.htmlparser.parserapplications.LinkExtractor org.htmlparser.parserapplications.LinkExtractor$1 org.htmlparser.parserapplications.StringExtractor org.htmlparser.filters.CssSelectorNodeFilter$YesFilter org.htmlparser.parserapplications.filterbuilder.Filter org.htmlparser.filters.CssSelectorNodeFilter$AdjacentFilter org.htmlparser.parserapplications.SiteCapturer$LocalLinkTag org.htmlparser.parserapplications.SiteCapturer$LocalFrameTag org.htmlparser.parserapplications.SiteCapturer$LocalImageTag org.htmlparser.parserapplications.filterbuilder.FilterBuilder org.htmlparser.parserapplications.filterbuilder.HtmlTreeModel org.htmlparser.parserapplications.filterbuilder.SubFilterList org.htmlparser.filters.CssSelectorNodeFilter$AttribMatchFilter org.htmlparser.filters.CssSelectorNodeFilter$HasAncestorFilter org.htmlparser.parserapplications.SiteCapturer$LocalBaseHrefTag org.htmlparser.parserapplications.filterbuilder.HtmlTreeCellRenderer org.htmlparser.parserapplications.filterbuilder.wrappers.OrFilterWrapper org.htmlparser.parserapplications.filterbuilder.layouts.NullLayoutManager org.htmlparser.parserapplications.filterbuilder.wrappers.AndFilterWrapper org.htmlparser.parserapplications.filterbuilder.wrappers.NotFilterWrapper org.htmlparser.parserapplications.filterbuilder.wrappers.RegexFilterWrapper org.htmlparser.parserapplications.filterbuilder.wrappers.StringFilterWrapper org.htmlparser.parserapplications.filterbuilder.layouts.VerticalLayoutManager org.htmlparser.parserapplications.filterbuilder.wrappers.TagNameFilterWrapper org.htmlparser.parserapplications.filterbuilder.wrappers.HasChildFilterWrapper org.htmlparser.parserapplications.filterbuilder.wrappers.HasParentFilterWrapper org.htmlparser.parserapplications.filterbuilder.wrappers.NodeClassFilterWrapper org.htmlparser.parserapplications.filterbuilder.wrappers.HasSiblingFilterWrapper org.htmlparser.parserapplications.filterbuilder.wrappers.HasAttributeFilterWrapper

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值