Posted on 2005-04-04 11:24
风太少 阅读(1379)
评论(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 了, 他的程序步骤就是
- 先产生一个 Parser 连结到 URL
- 设定你要下载的模式 vistor ( 可以使用内建的或自己开发 )
- parser 注册一个 scanner
- 真正去 parser 产生数据返回 array 给 node
- 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 的差异就是在这吧 ~~~~~~~