2011-12-05 15 views
1

GWTを使用して構築され、AJAX呼び出しにGWT RPCメカニズムを使用するWebページをクロールしようとしています。私がクロールしようとしているページは私のものではないので、私はサーバー側を編集できません。私はGWTとその最初の数日間のことから非常に新しくなっています - あなたとあなたのケースのインターフェースを持っていなければ、データをデシリアライズできないと思います。GWTベースのWebページのクロール/削除

正しいですか、データをインテリジェントにクロールする方法はありますか?

+1

私はhtmlunitを使用してそれを行うことができました。私の場合、これらは、良い仕事をするように見えます。 – gokul

答えて

1

あなたがhtmlunitとWebクライアントを使用してそれを行うことができます:あなたはWebクライアントオプションで少し実験が必要になる場合があります

//real code mixed with pseudo-code: 
WebClient webClient = new WebClient(BrowserVersion.FIREFOX_3); 
Map<String, String> urls = new HashMap<->(); 
LinkedList<String> urlsToVisit = new LinkedList<->(); 
urlsToVisit.put("http://some_gwt_app.com/#!home"); 
while (!urlsToVisit.isEmpty()) { 
    String page = urlsToVisit.remove(); 
    if (urls.containsKey(page)) { 
     continue; 
    } 
    String rendered = webClient.getPage(page); 
    urls.put(page, rendered); 
    urlsToVisit.addAll(extractLinks(page)); 
} 

。 - 私はDOMを手に入れる前に、ジャバスクリプトが実行されるように強制的に

webClient.setThrowExceptionOnScriptError(false); 
webClient.setRedirectEnabled(true); 
webClient.setJavaScriptEnabled(true); 
// important! Give the headless browser enough time to execute 
// JavaScript. The exact time to wait may depend on your application. 
webClient.waitForBackgroundJavaScript(20000); 
webClient.setAjaxController(new NicelyResynchronizingAjaxController()); 
+0

どのようにextractLinksを実装することをお勧めしますか? – wytten

+0

@wyttenそれは別の質問です(HTML解析):) – milan

+0

私はこの文脈でリンクを構成するものに特に関心があります: "a"、 "link"、 "script"、他のタグ? – wytten

0

私は暮らしのために擦り傷をつけています.GWTは、ほとんど常に私を狂ってしまうフレームワークです。シリアライズされた、人間が読めないパラメタを渡すという事実は、私がサイトにアクセスするロジックを取り除くのを妨げます。

いくつかの単純なGWTでは、私はJavaScriptを解析し、実行中の部分をそのまま解析する作業をしていますが、すべてを動作させることはできません。

+0

おそらく設計通りです。 –

関連する問題