2010年7月22日 星期四

放棄 Neko HtmlParser ,改用 Cobra HtmlParser 解析網頁

之前發佈的文章 使用 Neko HtmlParser 產生 Html DOM ,發現到 Neko HtmlParser 經常發出:

Exception in thread "main" org.w3c.dom.DOMException:
HIERARCHY_REQUEST_ERR:
An attempt was made to insert a node where it is not permitted.

這個錯誤訊息,直到最近才知道 Neko HtmlParser 似乎無法正確解析有命名空間的網頁,所以又改用較為冷門的 Cobra HtmlParser 來解析網站。

其實 Cobra HtmlParser 的語法跟 Neko HtmlParser 差異不大,最大差異在於 Cobra HtmlParser 必須要使用 UserAgentContext 協助解析, UserAgentContext 有點類似開啟一個簡單的瀏覽器。

下列為 Cobra HtmlParser 簡單的應用,其中 Cobra HtmlParser必須要去該官方網站下載套件,才能正常使用。

import org.lobobrowser.html.UserAgentContext;
import org.lobobrowser.html.parser.*;
import org.lobobrowser.html.test.*;
// 均為 Cobra HtmlParser 套件

public class html extends JFrame{
      UserAgentContext uacontext = new SimpleUserAgentContext();
      //建立簡單瀏覽器
      InputStream inputstream;
      Reader reader;
      HtmlParser parser;
      //建立解析器
      String URL;
      Document document;
      DocumentBuilderFactory documentbuilderfactory=
                                    DocumentBuilderFactory.newInstance();
      DocumentBuilder documentbuilder;

      public html(){
            documentbuilder=documentbuilderfactory.newDocumentBuilder();
      }

      public boolean loadURL(String input,String encode){
             try {                             // input 為網址, encode 為編碼
                   URL=input;
                   URL url = new URL(input);
                   inputstream = url.openConnection().getInputStream();
                   reader=new InputStreamReader(inputstream,encode);
                   document = documentbuilder.newDocument();         
                   parser = new HtmlParser(uacontext, document);
                   //將編譯器套入瀏覽器與 Document
                   parser.parse(reader);
                   //將網站原始碼載入編譯器
            ......
      }
}

參考資料:

沒有留言:

張貼留言