风行天下

JAVA太极
posts - 4, comments - 10, trackbacks - 0, articles - 55
  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

HTMLParser 过滤分析

Posted on 2005-04-04 11:24 风太少 阅读(1374) 评论(0)  编辑  收藏
SECTION 01 下载安装

如果老板今天要叫你写一个小程序, 去抓取某个网页的所有 image, 该怎么做呢, 你必须先把所有的 image url 先 parse 出来, 接著一个一个图片下载下来, 那么 image url 该如何 parse , 这个就是 htmlparser 的功能了, 当然, 应用方面非常的广, 在 xml 成为数据交换还没有普及化时, 利用其它网站的资料来加强自己网站的功能, 也是一件很重要的工作, 此外, 请注重知识产权


目前 realse 的版本是 1.3 Htmlparser 下载解压缩后该目录有 src.zip 是 source code.


SECTION 02 范例

因为 docs\docs 提供的范例有一点版本上的错误, method 名称可能不太正确, 不过观念是一样的, 可能要多测试一下, 最好有 IDE 去设置 lib (htmlparser.jar) 接著自动带出 Method Name 来修正这个错误

我改了几个正确的范例如下

AllNodeImageExtractor.java 下载该 URL 所有的 image 名称

import org.htmlparser.*;
import org.htmlparser.visitors.*;
import org.htmlparser.util.*;
import org.htmlparser.tags.*;


/**
 * LinkExtractor extracts all the links from the given webpage
 * and prints them on standard output.
 */
public class AllNodeImageExtractor {


  public static void main(String[] args) {
    try {
        Parser parser = new Parser("http://www.softleader.com.tw/companyIntro.screen");

          ObjectFindingVisitor visitor =
            new ObjectFindingVisitor(ImageTag.class,true);

          parser.registerScanners();

          // Instead of registering all scanners,
          // you could also do - parser.addScanner(new ImageScanner(""));

          Node [] images = parser.extractAllNodesThatAre(ImageTag.class);

          System.out.println(images.length);
          for (int i=0;i < images.length;i++) {
             ImageTag imageTag = (ImageTag)images[i];
             System.out.println(imageTag.getImageURL());
          }
    }
    catch (ParserException ex) {
        System.out.println(ex);
    }

  }
}

这程序非常简单, javac 编译完后直接用 java AllNodeImageExtractor 执行, 就可以列出所有的 imageName 了, 他的程序步骤就是
  1. 先产生一个 Parser 连结到 URL
  2. 设定你要下载的模式 vistor ( 可以使用内建的或自己开发 )
  3. parser 注册一个 scanner
  4. 真正去 parser 产生数据返回 array 给 node
  5. println 数据



SECTION 03 JavaBeans

执行方式
cmd>java -classpath htmlparser.jar org.htmlparser.beans.BeanyBaby

他的 BeanyBaby.class 在 htmlparser.jar 中, 你可以参考 org.htmlparser.beans.* 的所有程序, 如果你要连结到其它网页, 你可以修改 bb.setURL("http://whatUwannaGo");

    public static void main (String[] args)
    {
        BeanyBaby bb = new BeanyBaby ();
        bb.show ();
        bb.setURL ("http://www.netbeans.org");
    }



SECTION 03 后记

或许你很幸福完全不会遇到要转 html 的时候, 只是我以前为了parse html 用 mfc 写了很久, 现在利用 这个 lib 所花的功就只有把这些 documentum 读一读, 范例看一看, 参考 api doc 实现就好了, 真不知道 M$ 是否有这种 opensource support C#, 或许 .NET 和 JAVA 的差异就是在这吧 ~~~~~~~

只有注册用户登录后才能发表评论。


网站导航: