• 初识HTMLPARSER.NET


    一、HTMLParser.net是什么?

    HTMLParser.net是HtmlParser的JAVA版本的dot net版本。

    二、HTMLParser可以用来做什么?

    HtmlParser是用来改造或者提取HTML,通过HtmlParser可以高速,快捷的从Html页面中分离出你想要的内容。

    三、HTMLParser的核心模块是org.htmlparser.Parser类,这个类实际完成了对于HTML页面的分析工作。这个类有下面几个构造函数:
        public Parser ();
        public Parser (Lexer lexer, ParserFeedback fb);
        public Parser (URLConnection connection,ParserFeedbackfb) throws ParserException;
        public Parser (String resource, ParserFeedback feedback) throws ParserException;
        public Parser (String resource) throws ParserException;
        public Parser (Lexer lexer);
        public Parser (URLConnection connection) throws ParserException;
        和一个静态类 public static Parser createParser (String html, String charset);

    HTMLParser将解析过的信息保存为一个树的结构。Node是信息保存的数据类型基础。
    请看Node的定义:
    public interface Node extends Cloneable;

    Node中包含的方法有几类:
    对于树型结构进行遍历的函数,这些函数最容易理解:
      Node getParent ():取得父节点
      NodeList getChildren ():取得子节点的列表
      Node getFirstChild ():取得第一个子节点
      Node getLastChild ():取得最后一个子节点
      Node getPreviousSibling ():取得前一个兄弟 
      Node getNextSibling ():取得下一个兄弟节点
    取得Node内容的函数:
      String getText ():取得文本
      String toPlainTextString():取得纯文本信息。
      String toHtml () :取得HTML信息(原始HTML)
      String toHtml (boolean verbatim):取得HTML信息(原始HTML)
      String toString ():取得字符串信息(原始HTML)
      Page getPage ():取得这个Node对应的Page对象
      int getStartPosition ():取得这个Node在HTML页面中的起始位置
      int getEndPosition ():取得这个Node在HTML页面中的结束位置
    用于Filter过滤的函数:
      void collectInto (NodeList list, NodeFilter filter):基于filter的条件对于这个节点进行过滤,符合条件的节点放到list中。
    用于 Visitor遍历的函数:
      void accept (NodeVisitor visitor):对这个Node应用visitor
    用于修改内容的函数,这类用得比较少:
      void setPage (Page page):设置这个Node对应的Page对象
      void setText (String text):设置文本
      void setChildren (NodeList children):设置子节点列表
    其他函数:
      void doSemanticAction ():执行这个Node对应的操作(只有少数Tag有对应的操作)
      Object clone ():接口Clone的抽象函数


    实际我们用HTMLParser最多的是处理HTML页面,Filter或Visitor相关的函数是必须的,然后第一类和第二类函数是用得最多的
    AbstractNodes是Node的直接子类,也是一个抽象类。它的三个直接子类实现是RemarkNode,用于保存注释。在输出结果的 toString部分中可以看到有一个"Rem (345[6,2],356[6,13]): 这是注释",就是一个RemarkNode。TextNode也很简单,就是用户可见的文字信息。TagNode是最复杂的,包含了HTML语言中的所有标签,而且可以扩展(扩展 HTMLParser 对自定义标签的处理能力)。TagNode包含两类,一类是简单的Tag,实际就是不能包含其他Tag的标签,只能做叶子节点。另一类是 CompositeTag,就是可以包含其他Tag,是分支节点

    HTMLParser遍历了网页的内容以后,以树(森林)结构保存了结果。HTMLParser访问结果内容的方法有两种。使用Filter和使用 Visitor。

    (一)Filter类
    顾名思义,Filter就是对于结果进行过滤,取得需要的内容。HTMLParser在 org.htmlparser.filters包之内一共定义了16个不同的Filter,也可以分为几类。
    判断类Filter:
      TagNameFilter
      HasAttributeFilter
      HasChildFilter
      HasParentFilter
      HasSiblingFilter
      IsEqualFilter
    逻辑运算Filter:
      AndFilter
      NotFilter
      OrFilter
      XorFilter
    其他 Filter:
      NodeClassFilter
      StringFilter
      LinkStringFilter
      LinkRegexFilter
      RegexFilter
      CssSelectorNodeFilter

    所有的Filter类都实现了org.htmlparser.NodeFilter接口。这个接口只有一个主要函数:
    boolean accept (Node node);
    各个子类分别实现这个函数,用于判断输入的Node是否符合这个Filter的过滤条件,如果符合,返回 true,否则返回false。

    下面将以具体的例子来学习htmlparser.net

  • 相关阅读:
    MVVM CopyValuesTo接触属性上下级关联
    怎样控制WPF GroupBox.HeaderTemplate中的控件
    wpf动态创建DataGrid
    mvvm 绑定textbox焦点丢失问题
    C# 导出CSV文件
    使用C#选择文件夹、打开文件夹、选择文件或者如何使用C#选择文件夹
    EF 强制从数据库刷新集合
    WPF及Silverlight中将DataGrid数据导出
    VS 2005中winForm开发(C#)—图片上传到数据库与显示(sql server 2005)
    数据导出为csv文件时 数值型数据为科学计数法 时间被截取的解决方法
  • 原文地址:https://www.cnblogs.com/Leo_wl/p/2226248.html
Copyright © 2020-2023  润新知