HTMLPARSER學習小結

來源:互聯網
上載者:User
htmlparser是個優秀的網頁資訊抓取工具,下面小結其一些基本的用法:

1 建立parser對象,有兩種方式

  Parser parser=new Parser(String html)

  傳入的html

  第2種為:

   //通過指定URLConnection對象建立Parser對象

  Parser parser = new Parser((HttpURLConnection)(new URL(url)).openConnection());

之後就可以進行訪問parser中解析好的內容了

2 解析時,有兩類方式,visitor方式和filter過濾方式,vistior方式需要遍曆每一個節點,

而filter方式則是過濾。

3 visitor方式的例子;

   try{

//通過指定URLConnection對象建立Parser對象

Parser parser = new Parser((HttpURLConnection)(new URL(url)).openConnection());

//設定Parser對象的字元編碼,一般與網頁的字元編碼保持一致

        parser.setEncoding("GB2312");

        //建立LinkFindingVisitor對象

        LinkFindingVisitor lvisitor = new LinkFindingVisitor("http://news.qq.com/");

        //尋找http://www.qq.com的連結個數

        parser.visitAllNodesWith(lvisitor);

        System.out.println("網頁中包含http://news.qq.com/的連結個數:"+lvisitor.getCount());

}catch(Exception ex){

ex.printStackTrace();

}

      /** TextExtractingVisitor類的用法舉例 */

public static void testTextExtractingVisitor(String url){

try{

//通過指定URLConnection對象建立Parser對象

Parser parser = new Parser((HttpURLConnection)(new URL(url)).openConnection());

//設定Parser對象的字元編碼,一般與網頁的字元編碼保持一致

        parser.setEncoding("GB2312");

        //建立StringFindingVisitor對象

        TextExtractingVisitor visitor = new TextExtractingVisitor();

        //去除網頁中的所有標籤,提出純文字內容

        parser.visitAllNodesWith(visitor);

        System.out.println("網頁的純文字內容為:"+visitor.getExtractedText());

}catch(Exception ex){

ex.printStackTrace();

}

}

4 還可以自訂nodevisitor來擴充nodevisitor,重載其中的各方法:

  /** 自訂NodeVisitor子類,並重載抽象類別NodeVisitor中的相關方法 */

public class MyNodeVisitor extends NodeVisitor {

/** 重載抽象類別NodeVisitor的beginParsing方法,解析開始時調用此方法 */

public void beginParsing(){

System.out.println("開始解析HTML內容......");

}

/** 重載抽象類別NodeVisitor的finishedParsing方法,解析結束時調用此方法 */

public void finishedParsing(){

System.out.println("整個HTML內容解析完畢!");

}

/** 重載抽象類別NodeVisitor的visitTag方法,遇到開始標籤時調用此方法 */

public void visitTag(Tag tag){

System.out.println("開始當前標籤: "+tag.getText());

}

/** 重載抽象類別NodeVisitor的visitEndTag方法,遇到結束標籤時調用此方法 */

public void visitEndTag(Tag tag){

System.out.println("結束當前標籤: "+tag.getText());

}

/** 重載抽象類別NodeVisitor的visitStringNode方法,遇到文本節點時調用此方法 */

public void visitStringNode(Text string){

System.out.println("當前文本節點: "+string);

}

/** 重載抽象類別NodeVisitor的visitRemarkNode方法,遇到注釋時調用此方法 */

public void visitRemarkNode(Remark remark){

System.out.println("當前注釋: "+remark);

}

5 使用filter方式過濾

  基本用法:

   TagNameFilter類用法

   //通過指定URLConnection對象建立Parser對象

Parser parser = new Parser((HttpURLConnection)(new URL(url)).openConnection());

        //設定Parser對象的字元編碼,一般與網頁的字元編碼保持一致

parser.setEncoding("GB2312");

            //建立TagNameFilter執行個體

            NodeFilter filter = new TagNameFilter ("DIV");

            //篩選出所有DIV標籤節點

            NodeList nodes = parser.extractAllNodesThatMatch(filter);

            if(nodes!=null) {

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

                    Node textnode = (Node) nodes.elementAt(i);                   

                    System.out.println("當前DIV:"+textnode.getText());

                }

   AndFilter類用法

    //通過指定URLConnection對象建立Parser對象

Parser parser = new Parser((HttpURLConnection)(new URL(url)).openConnection());

        //設定Parser對象的字元編碼,一般與網頁的字元編碼保持一致

parser.setEncoding("GB2312");

            //建立HasAttributeFilter執行個體

        NodeFilter filter1 = new HasAttributeFilter("id");

        //建立TagNameFilter執行個體

        NodeFilter innerFilter = new TagNameFilter ("DIV");

        //建立HasChildFilter執行個體

        NodeFilter filter2 = new HasChildFilter(innerFilter);

        //建立AndFilter執行個體

        NodeFilter filter = new AndFilter(filter1, filter2);

        //篩選出所有具有id屬性且擁有子節點的所有DIV節點

        NodeList nodes = parser.extractAllNodesThatMatch(filter);

            if(nodes!=null) {

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

                    Node textnode = (Node) nodes.elementAt(i);                   

                    System.out.println("當前DIV:"+textnode.getText());

                }

            }      

StringFilter類用法:

  //通過指定URLConnection對象建立Parser對象

Parser parser = new Parser((HttpURLConnection)(new URL(url)).openConnection());

        //設定Parser對象的字元編碼,一般與網頁的字元編碼保持一致

parser.setEncoding("GB2312");

//建立StringFilter執行個體

        NodeFilter filter = new StringFilter("陳水扁");

        //篩選出所有包含"陳水扁"字串的所有文本節點

        NodeList nodes = parser.extractAllNodesThatMatch(filter);

            if(nodes!=null) {

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

                    Node textnode = (Node) nodes.elementAt(i);                   

                    System.out.println("包含\"陳水扁\"字串的文本節點:"+textnode.getText());

                }

            }      

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.