Posted on 2005-04-04 11:24
風太少 閱讀(1380)
評論(0) 編輯 收藏
SECTION 01 下載安裝
如果老板今天要叫你寫一個小程序, 去抓取某個網(wǎng)頁的所有 image, 該怎么做呢, 你必須先把所有的 image url 先 parse 出來, 接著一個一個圖片下載下來, 那么 image url 該如何 parse , 這個就是 htmlparser 的功能了, 當然, 應(yīng)用方面非常的廣, 在 xml 成為數(shù)據(jù)交換還沒有普及化時, 利用其它網(wǎng)站的資料來加強自己網(wǎng)站的功能, 也是一件很重要的工作, 此外,
請注重知識產(chǎn)權(quán) 目前 realse 的版本是 1.3
Htmlparser 下載解壓縮后該目錄有 src.zip 是 source code.
SECTION 02 范例
因為 docs\docs 提供的范例有一點版本上的錯誤, method 名稱可能不太正確, 不過觀念是一樣的, 可能要多測試一下, 最好有 IDE 去設(shè)置 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 執(zhí)行, 就可以列出所有的 imageName 了, 他的程序步驟就是
- 先產(chǎn)生一個 Parser 連結(jié)到 URL
- 設(shè)定你要下載的模式 vistor ( 可以使用內(nèi)建的或自己開發(fā) )
- parser 注冊一個 scanner
- 真正去 parser 產(chǎn)生數(shù)據(jù)返回 array 給 node
- println 數(shù)據(jù)
SECTION 03 JavaBeans
執(zhí)行方式
cmd>java -classpath htmlparser.jar org.htmlparser.beans.BeanyBaby
他的 BeanyBaby.class 在 htmlparser.jar 中, 你可以參考 org.htmlparser.beans.* 的所有程序, 如果你要連結(jié)到其它網(wǎng)頁, 你可以修改 bb.setURL("http://whatUwannaGo");
public static void main (String[] args)
{
BeanyBaby bb = new BeanyBaby ();
bb.show ();
bb.setURL ("http://www.netbeans.org");
}
SECTION 03 后記
或許你很幸福完全不會遇到要轉(zhuǎn) html 的時候, 只是我以前為了parse html 用 mfc 寫了很久, 現(xiàn)在利用 這個 lib 所花的功就只有把這些 documentum 讀一讀, 范例看一看, 參考 api doc 實現(xiàn)就好了, 真不知道 M$ 是否有這種 opensource support C#, 或許 .NET 和 JAVA 的差異就是在這吧 ~~~~~~~