简单的网页处理工具-HtmlParser

HtmlParser 是一个用来解析 HTML 文件的 java 包,相对于jdk提供的api,它更为方便也更为简单。对于写一些java的爬虫或者需要解析html的地方是很实用的。

这里是html的下载地址:

HtmlParser类的结构
采用了经典了组合模式(cmoposite),类的树形结构如图,从类的名称上就可以很清晰的知道这个类大概的作用。
Node类结构

CompositeTage 下的子类:

下面是几个重要的类,了解这几个类再结合类图,基本上就可以很轻松实现解析网页。

1. org.htmlparser.Node
Node接口定义了进行树形结构节点操作的典型操作方法:

  • 节点到 html 文本: toPlainTextString()
  • 节点到 text 文本: tohtml()
  • 树形遍历方法:
    • getParent()
    • getChildren()
    • getFristChild()
    • getLastChild()
    • getPreviousSibing()
    • getNextSibling()
    • getText()
  • 获取节点对应树形结构的顶级节点 Page 的方法 getPage()
  • 获取节点的起始位置的方法 getStartPosition() getEndPosition()
  • 遍历节点的方法 accept(NodeVisitor visitor)
  • Filter 方法 collectInto(NodeList list,NodeFilter filter)

    2. org.htmlparser.nodes.AbstractNode
    AbstractNode 是形成HTML树形结构的抽象基类,实现了Node接口。在HtmlParser中,Node分成三类,详见类图中

    3. org.htmlparser.nodes.TagNode
    TagNode 包含了对HTML处理的核心的各个类,是所有TAG的积累,其中又分为包含其他复合节点ComositeTag 和不包含其他 TAG 类的叶子结点 Tag。各类的关系详见类图。

HtmlParser 访问互联网的两种方式

  • Visitor 方式
import org.htmlparser.Parser;
import org.htmlparser.Tag;
import org.htmlparser.util.ParserException;
import org.htmlparser.visitors.NodeVisitor;

public class Test {
    public static void main(String[] args) {
        Parser parser=new Parser();
        try {
            parser.setURL("http://www.csdn.net");
            parser.setEncoding(parser.getEncoding());
            NodeVisitor visitor=new NodeVisitor() {
                @Override
                public void visitTag(Tag tag) {
                    super.visitTag(tag);
                    System.out.println("All Tag name is "+
                    tag.getTagName()+"\n class is" + tag.getClass());
                }
            };
            parser.visitAllNodesWith(visitor);
        } catch (ParserException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
}

部分执行结果

  • Filter 方式
import org.htmlparser.NodeFilter;
import org.htmlparser.Parser;
import org.htmlparser.filters.NodeClassFilter;
import org.htmlparser.tags.LinkTag;
import org.htmlparser.util.NodeList;
import org.htmlparser.util.ParserException;

public class Test {
    public static void main(String[] args) {
        NodeFilter filter=new NodeClassFilter(LinkTag.class);
        Parser parser=new Parser();
        try {
            parser.setURL("http://www.csdn.net");
            parser.setEncoding(parser.getEncoding());
            NodeList list=parser.extractAllNodesThatMatch(filter);
            for(int i=0;i<list.size();i++){
                LinkTag node=(LinkTag) list.elementAt(i);
                System.out.println("Link is  "+ node.extractLink() );
            }
        } catch (ParserException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
}

部分结果

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值