Jeffrey Cross
Jeffrey Cross

クロールAJAX

従来、Webスパイダーシステムは、サーバーへの接続、HTMLドキュメントのプルダウン、ドキュメント内の他のHTTP URLへのアンカーリンクのスキャン、および検出されたすべてのURLで同じプロセスの繰り返しを行います。各URLは、従来のWebサイトのさまざまな状態を表します。 AJAXアプリケーションでは、ページコンテンツの多くはHTMLドキュメントに含まれていませんが、ページの読み込み中にJavascriptによって動的に挿入されます。さらに、アンカーリンクは他の文書を指すのではなく、JavaScriptイベントをトリガーすることができます。アプリケーションの状態は、ページの読み込み後に発生した一連のJavascriptイベントによって定義されます。その結果、従来のスパイダーはサイトのコンテンツのごく一部しか見ることができず、アプリケーションの状態情報をインデックスに登録することができません。

では、どうやって問題を解決するのでしょうか。

人間のようにAJAXをクロールするAJAXをクロールするには、クモはHTMLだけでなくページについても理解する必要があります。ドキュメントの構造とそれを操作するJavaScriptを理解できる必要があります。アプリケーションのより深い状態を調査できるようにするには、クロールプロセスでドキュメント内のイベントを認識して実行し、実際のユーザーがたどる可能性があるパスをシミュレートする必要もあります。

Shreeraj Shahの論文、Crawling Ajax-driven Web 2.0アプリケーションは、Webクローリングに対する「イベント駆動型」アプローチについて説明しています。これは、人間がフル機能のWebブラウザを操作するのと同じように、動的なJavascript駆動のDOMコンテンツを取得、実行、および解析できる、よりスマートなクラスのWebクロールソフトウェアを作成することです。

クローラがAjax埋め込みページに遭遇した場合、「プロトコル駆動」アプローチは機能しません。これは、すべてのターゲットリソースがJavaScriptコードの一部であり、DOMコンテキストに埋め込まれているためです。このDOMベースのアクティビティを理解し、それを引き起こすことが重要です。その過程で、これは「イベント駆動型」クロールと呼ばれる別のアプローチにつながりました。以下の3つの主要コンポーネント

  1. AjaxにリンクしたままのJavaScript分析および解釈
  2. DOMイベントの処理と送出
  3. 動的DOMコンテンツ抽出

必要なツールAJAX対応のイベント駆動型クローラを実装する最も簡単な方法は、基盤となるプラットフォームとして最新のブラウザを使用することです。 WatirとCrowbarという2つのツールが用意されています。これらを使用すると、コードからFirefoxまたはIEを制御でき、ページデータを抽出できます。 後に Javascriptを処理しました。

WatirはRubyを使ってブラウザの自動化を可能にするライブラリです。もともとIE用に構築されましたが、FirefoxとSafariの両方にも移植されています。 Watir APIを使用すると、ブラウザプロセスを起動して、Rubyアプリケーションから直接アンカーリンクを抽出してクリックできます。このアプリケーションだけでも、私はRubyに慣れたくなります。

Crowbarは、Webコンテンツのレンダリングと解析にヘッドレスバージョンのFirefoxを使用するもう1つの興味深いツールです。素晴らしいのは、ブラウザへのWebサーバーインターフェイスが提供されているため、任意の言語から簡単なGETまたはPOSTリクエストを発行して、必要に応じて結果を確認できることです。これにより、curlまたはwgetを使用して、簡単なコマンドラインスクリプトからでもブラウザと対話できます。

どのツールを使用するかは、クローラのニーズによって異なります。 Crowbarには言語に依存しないという利点があり、ページの読み込みが完了した後にのみ存在するページ情報を抽出するために従来のクローラー設計に統合するのが簡単です。その一方で、Watirはブラウザへのより深く対話的なアクセスを可能にし、その後のJavascriptイベントを引き起こすことができます。欠点は、クローラの背後にあるアプリケーションの状態を深く掘り下げることができるロジックがかなり複雑になっていることです。そしてWatirでは、Rubyに縛られています。

Crowbar - サーバーサイドのヘッドレスFirefox Watir - Ruby Crawling Ajax駆動型Web 2.0アプリケーションのブラウザリモートコントロール(PDF)

シェア

コメントを残します