DUICUO

検索エンジン技術の解読:ラービン

I. はじめに

Larbin は C++ で開発されたオープンソースの Web クローラーであり、カスタマイズ オプションと高速な Web ページ クロールを提供します。

Larbin クローラーの構造図と主要モジュールの対応を下図に示します。

Larbin の動作は次のように説明できます。シード URL ファイルは最初に *URLsDisk として初期化され、namedSiteList に読み込まれ、adns ライブラリ呼び出しを介して Fifo<NamedSite> *dnsSites と Fifo<IPSite> *okSites に徐々にロードされます。Fetch モジュールは、Fifo<IPSite> *okSites からクロールする URL を直接取得し、クロールされたページのハッシュ テーブルを構築して、重複したクロールを防止します。次に、ダウンロードされたページから HTML のような方法を使用して新しい URL を抽出します。フロントエンド キューに追加された新しい URL はロボット フィルターに準拠する必要があり、重複する URL はハッシュ テーブルを使用して削除されます。クロールが完了すると、関連する読み取りおよび書き込み操作が実行され、次に poll 関数が適切なソケット インターフェイスを選択して新しいクロールを開始します。このクロール プロセスは、ユーザーが終了するかプロセスが中断されるまで無期限に続行できます。

Larbin プロジェクトの詳細 (ソース コードを含む) については、こちらをご覧ください。

II. インストール

この例では、CentOS 6.2 のソース コードから larbin-2.6.3.tar.gz をインストールする方法を示します。

指定のディレクトリに解凍した後、`./configure` を直接実行すると、通常、依存関係エラー(`make depend`)が発生します。この問題を解決するには、以下の手順で依存関係をインストールしてください。

  1. #yum で makedepend をインストール
  2. #./configure

`./configure` が成功した場合、`make` を直接実行すると、主に次のようなエラーが発生します。

  1. parse.c:113: エラー: 'adns__parse_domain' の型が競合しています
  2. internal.h:569: 注記: 'adns__parse_domain' の以前の宣言はここにありました

adns ディレクトリに移動し、internal.h を見つけて、関数をコメント アウトするだけです。

`make` を再度実行してもエラーは解消されませんでした。今回は、コードが古いC言語で記述されていたことが主な原因でした。具体的には、以下のようになります。

  1. input.cc:6:22: エラー: iostream.h: そのようなファイルまたはディレクトリはありません

次のコマンドを使用して、 iostream.h をiostream置き換えます。

  1. #sed -i -e 's/iostream.h/iostream/g' `grep -rl iostream.h *`

上記の「grep」記号は一重引用符ではなく、Esc キーの下のバックスラッシュ (`) であることに注意してください。

再度 `make` を実行すると、以下に示すように、上記と同じ理由で多数のエラーが発生しました。

  1. hashTable.cc:32: エラー: 'cerr' はこのスコープで宣言されていません
  2. hashTable.cc:41: エラー: 'cerr' はこのスコープで宣言されていません
  3. hashTable.cc:42: エラー: 'endl' はこのスコープで宣言されていません

cerr と endl を std::cerr と std::endl に置き換えるには、次のコマンドを実行します。

  1. #sed -i -e 's/cerr/std::cerr/g' `grep -rl cerr *`
  2. #sed -i -e 's/endl/std::endl/g' `grep -rl endl *`

もう一度makeすれば問題は発生しません。コンパイル後、larbin実行ファイルが現在のディレクトリに生成されます。

  1. #./larbin
  2. larbin_2.6.3が検索を開始しています

上記の画面出力は、Larbin が正常に起動したことを示しています。

III. 構成

上記の方法でlarbinを起動すると、デフォルトの設定ファイルlarbin.confが使用されます。もちろん、以下のように設定ファイルを指定することもできます。

  1. #./larbin -c 設定ファイル

Larbinの設定は、options.hとlarbin.confの組み合わせで行います。前者を変更するには再コンパイルが必要ですが、後者を変更するには再起動のみが必要です。

理想的には、options.h で次のパラメータを有効にする必要があります。

  1. #define SIMPLE_SAVE // キャプチャしたページを save/dxxxxx/fyyyyy ディレクトリに保存します。各ディレクトリには 2000 個のファイルが含まれます。
  2. #define FOLLOW_LINKS // 子リンクの取得を続行する
  3. #define CGILEVEL 1 //CGIを取得するかどうか
  4. #define DEPTHBYSITE // 新しいURLを入力するときに深さを初期化するかどうか
  5. #define RELOAD // このオプションを設定すると、中断したところからクロールを再開できます。中断したところから再開するには、-scratch オプションを使用してください。
  6. #define CRASH // 重大なバグを報告するために使用され、gmake デバッグ モードでコンパイルするときに使用されます。

設定が完了したら、`make` を実行することを忘れないでください。

理想的には、larbin.conf で次のパラメータを有効にする必要があります。

  1. httpPort 8081 // クロール結果の表示に使用されるWebサービスポート
  2. inputPort 1976 //URLをクロールするためのTelnetサービスポートを設定するために使用されます
  3. pagesConnexions 100 // ウェブページを並列にクロールする接続数
  4. dnsConnexions 5 // 並列DNS解決の数
  5. depthInSite 5 // サイトのクロール深度
  6. waitDuration 60 // 同じサーバーへのアクセス間隔は 30 秒以上である必要があり、60 秒が推奨されます。
  7. startUrl http://slashdot.org/ //ページのクロールを開始

詳細な設定情報については、このリンクを参照してください。

設定が完了したら、サービスを開始してデータのキャプチャを開始できます。

開始URLを設定するだけでなく、「telnet localhost 1976」経由でも設定できます。ターミナルプロンプトに以下を入力してください。

  1. 優先度:1 深度:3 テスト:0
  2. http://www.baidu.com

ここでは、入力したURLが他のURLよりも先にクロールされるように、優先度を1に設定しています。URLを多数入力した場合は、URLのメモリ不足を防ぐため、優先度を0に設定しています。

深さパラメータは、リンクがクロールされる深さを指定します。通常は 5 を超えてはなりません。

test を 0 に設定すると、ウェブページが既にクロールされていて再度クロールする必要がある場合、そのページはクロールされます。test を 1 に設定すると、重複したクロールを防ぐことができます。

この設定の効果は、 larbin.conf のstartUrlと同じです

IV. 使用法

実行: ./larbin (または、larbin をバックグラウンドで実行するには「nohup ./larbin &」)

停止: Ctrl+C

再起動: ./larbin -scratch

larbin を停止するために Ctrl+z を使用しないでください。そうしないと、./larbin または ./larbin -scratch を使用して再起動しようとすると、ポートが占有され、再起動できなくなります。

あるいは、http://localhost:8081 経由で larbin にアクセスし、ページから larbin の動作に関する情報を取得することもできます。

オリジナルリンク: http://blog.chinaunix.net/uid-22312037-id-4390559.html