風(fēng)行天下

          JAVA太極
          posts - 4, comments - 10, trackbacks - 0, articles - 55
            BlogJava :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

          HTMLParser 過(guò)濾分析

          Posted on 2005-04-04 11:24 風(fēng)太少 閱讀(1383) 評(píng)論(0)  編輯  收藏
          SECTION 01 下載安裝

          如果老板今天要叫你寫(xiě)一個(gè)小程序, 去抓取某個(gè)網(wǎng)頁(yè)的所有 image, 該怎么做呢, 你必須先把所有的 image url 先 parse 出來(lái), 接著一個(gè)一個(gè)圖片下載下來(lái), 那么 image url 該如何 parse , 這個(gè)就是 htmlparser 的功能了, 當(dāng)然, 應(yīng)用方面非常的廣, 在 xml 成為數(shù)據(jù)交換還沒(méi)有普及化時(shí), 利用其它網(wǎng)站的資料來(lái)加強(qiáng)自己網(wǎng)站的功能, 也是一件很重要的工作, 此外, 請(qǐng)注重知識(shí)產(chǎn)權(quán)


          目前 realse 的版本是 1.3 Htmlparser 下載解壓縮后該目錄有 src.zip 是 source code.


          SECTION 02 范例

          因?yàn)?docs\docs 提供的范例有一點(diǎn)版本上的錯(cuò)誤, method 名稱(chēng)可能不太正確, 不過(guò)觀念是一樣的, 可能要多測(cè)試一下, 最好有 IDE 去設(shè)置 lib (htmlparser.jar) 接著自動(dòng)帶出 Method Name 來(lái)修正這個(gè)錯(cuò)誤

          我改了幾個(gè)正確的范例如下

          AllNodeImageExtractor.java 下載該 URL 所有的 image 名稱(chēng)
          
          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);
              }
          
            }
          }
          
          
          這程序非常簡(jiǎn)單, javac 編譯完后直接用 java AllNodeImageExtractor 執(zhí)行, 就可以列出所有的 imageName 了, 他的程序步驟就是
          1. 先產(chǎn)生一個(gè) Parser 連結(jié)到 URL
          2. 設(shè)定你要下載的模式 vistor ( 可以使用內(nèi)建的或自己開(kāi)發(fā) )
          3. parser 注冊(cè)一個(gè) scanner
          4. 真正去 parser 產(chǎn)生數(shù)據(jù)返回 array 給 node
          5. 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)頁(yè), 你可以修改 bb.setURL("http://whatUwannaGo");
          
              public static void main (String[] args)
              {
                  BeanyBaby bb = new BeanyBaby ();
                  bb.show ();
                  bb.setURL ("http://www.netbeans.org");
              }
          



          SECTION 03 后記

          或許你很幸福完全不會(huì)遇到要轉(zhuǎn) html 的時(shí)候, 只是我以前為了parse html 用 mfc 寫(xiě)了很久, 現(xiàn)在利用 這個(gè) lib 所花的功就只有把這些 documentum 讀一讀, 范例看一看, 參考 api doc 實(shí)現(xiàn)就好了, 真不知道 M$ 是否有這種 opensource support C#, 或許 .NET 和 JAVA 的差異就是在這吧 ~~~~~~~

          只有注冊(cè)用戶(hù)登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 集安市| 泰宁县| 镇巴县| 荥经县| 通山县| 马公市| 浦北县| 隆回县| 离岛区| 滁州市| 永仁县| 尚义县| 射阳县| 河源市| 满洲里市| 阳西县| 临沂市| 鄄城县| 惠来县| 邵武市| 武义县| 沙洋县| 丰台区| 壶关县| 乐亭县| 咸阳市| 兴安县| 永州市| 休宁县| 丁青县| 德州市| 庆阳市| 丹江口市| 顺义区| 颍上县| 广安市| 神池县| 呼和浩特市| 朔州市| 凤城市| 阜南县|