`
李丹.杭州
  • 浏览: 15527 次
  • 性别: Icon_minigender_2
  • 来自: 杭州
文章分类
社区版块
存档分类
最新评论

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

阅读更多
因为在项目中用到 然后转来存着
在研究搜索引擎的开发中,对于HTML网页的处理是核心的一个环节。网上有很多开源的代码,对于Java来说,HTMLParser是比较著名并且得到广泛应用的一个。HTMLParser的主页是http://htmlparser.sourceforge.net/,最后的更新是 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 www.baizeju.com
*/

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 www.baizeju.com
*/
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的内容我们在后面讨论。
分享到:
评论

相关推荐

    HTMLParser使用详解.doc

    6. `public Parser (Lexer lexer)`: 仅使用 Lexer 初始化。 7. `public Parser (URLConnection connection)`: 从 URL 连接解析。 8. `public static Parser createParser (String html, String charset)`: 静态方法...

    htmlparser使用详解

    2. `public Parser (Lexer lexer, ParserFeedback fb)`: 使用指定的 Lexer 和 ParserFeedback 实例初始化。 3. `public Parser (URLConnection connection, ParserFeedback fb)`: 从 URLConnection 对象解析 HTML ...

    htmlparser中文文档

    1. **初始化HTMLParser**:创建一个`Parser`对象,并指定解析源(如文件路径或URL)。 ```java Parser parser = new Parser("http://example.com"); ``` 2. **解析HTML文档**:调用`parse()`方法进行解析。 ```...

    Java 爬虫监控管理平台

    - **Scheduler**:启动爬虫,初始化TaskQueue,并创建监控线程,当所有条件满足时(TaskQueue为空且无活跃Worker线程)决定程序退出。 - **Task Master**:管理任务队列,初始化并控制任务的分配。 - **Workers**...

    Python 网页解析HTMLParse的实例详解

    1. **初始化类**:首先定义一个子类 `MyHTMLParser` 继承自 `HTMLParser`,并在类中定义变量 `title_flag` 用于标记是否正在解析 `<title>` 标签内的数据。 2. **处理开始标签**:当遇到 `<title>` 标签时设置 `...

Global site tag (gtag.js) - Google Analytics