HTMLParser使用详解(1)- 初始化Parser

 


 HTMLParser使用详解(1)- 初始化Parser


2009-03-12 19:39:43
 标签: HTMLParser Java   [ 推送到技术圈
在研究搜索引擎的开发中,对于HTML网页的处理是核心的一个环节。网上有很多开源的代码,对于Java来说,HTMLParser是比较著名并且得到广 泛应用的一个。HTMLParser的主页是[url]http://htmlparser.sourceforge.net/[/url],最后的更新是2006年9月的 1.6版。不过没关系,HTML的内容已经很久没有大的变化了,HTMLParser处理起来基本没有任何问题。HTMLParser具有小巧,快速的优 点,缺点是相关文档比较少(英文的也少),很多功能需要自己摸索。对于初学者还是要费一些功夫的,而一旦上手以后,会发现HTMLParser的结构设计 很巧妙,非常实用,基本你的各种需求都可以满足。
    这里我根据自己这几个月来的经验,写了一点入门的东西,希望能对新学习HTMLParser的朋友们有所帮助。(不过当年高考本人语文只比及格高一分,所以文法方面的问题还希望大家多多担待)
    
    HTMLParser的核心模块是org.htmlparser.Parser类,这个类实际完成了对于HTML页面的分析工作。这个类有下面几个构造函数:
    public Parser ();
    public Parser (Lexer lexer, ParserFeedback fb);
    public Parser (URLConnection connection, ParserFeedback fb) 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);

    对于大多数使用者来说,使用最多的是通过一个URLConnection或者一个保存有网页内容的字符串来初始化Parser,或者使用静态函数来生成一 个Parser对象。ParserFeedback的代码很简单,是针对调试和跟踪分析过程的,一般不需要改变。而使用Lexer则是一个相对比较高级的 话题,放到以后再讨论吧。
    这里比较有趣的一点是,如果需要设置页面的编码方式的话,不使用Lexer就只有静态函数一个方法了。对于大多数中文页面来说,好像这是应该用得比较多的一个方法。

   下面是初始化Parser的例子。

/**
* @author [url]www.baizeju.com[/url]
*/


package com.baizeju.htmlparsertester;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.FileInputStream;
import java.io.File;
import java.net.HttpURLConnection;
import java.net.URL;

import org.htmlparser.visitors.TextExtractingVisitor;

import org.htmlparser.Parser;

/**
* @author [url]www.baizeju.com[/url]
*/

public  class Main {
         private  static String ENCODE =  "GBK";
         private  static  void message( String szMsg ) {
                 try{ System.out.println( new String(szMsg.getBytes(ENCODE), System.getProperty( "file.encoding"))); }  catch(Exception e ){}
        }
         public  static String openFile( String szFileName ) {
                 try {
                        BufferedReader bis =  new BufferedReader( new InputStreamReader( new FileInputStream(  new File(szFileName)), ENCODE) );
                        String szContent="";
                        String szTemp;
                     
                         while ( (szTemp = bis.readLine()) !=  null) {
                                szContent+=szTemp+ "/n";
                        }
                        bis.close();
                         return szContent;
                }
                 catch( Exception e ) {
                         return "";
                }
        }
     
      public  static  void main(String[] args) {
             
                String szContent = openFile(  "E:/My Sites/HTMLParserTester.html");
             
                 try{
                         //Parser parser = Parser.createParser(szContent, ENCODE);
                         //Parser parser = new Parser( szContent );
                        Parser parser =  new Parser( (HttpURLConnection) ( new URL( "http://127.0.0.1:8080/HTMLParserTester.html")).openConnection() );
             
                        TextExtractingVisitor visitor = new TextExtractingVisitor();
                        parser.visitAllNodesWith(visitor);
                        String textInPage = visitor.getExtractedText();

                        message(textInPage);
                }
                catch( Exception e ) {                     
                }
        }
}
加重的部分测试了几种不同的初始化方法,后面的显示了结果。大家看到能Parser出内容就可以了,如何操作访问Parser的内容我们在后面讨论。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值