2012-01-10 17 views
5

私は何をすることです:
- ページ
をクロール - ページのすべてのリンクを取得し、リストでそれらを置く
が -
リストの各リンクを訪問新しいクローラを、開始 - 彼らに
ページからのすべてのリンクをより迅速にダウンロードするようにcrawler4jを取得するにはどうすればよいですか?

をダウンロード

私はページにアクセスしたときに直接リンクをダウンロードできるより速い方法が必要ですか?どうも!

答えて

6

crawler4jが自動的にこの処理を行います。最初に1つまたは複数のシードページを追加します。これらは、最初にフェッチされ処理されるページです。 crawler4jはこれらのページ内のすべてのリンクを抽出し、shouldVisit関数に渡します。本当にすべてをクロールしたいのであれば、この関数はすべての関数に対してtrueを返す必要があります。特定のドメイン内のページのみをクロールする場合は、URLを確認して、それに基づいてtrueまたはfalseを返すことができます。

shouldVisitがtrueを返すURLは、クローラスレッドによってフェッチされ、同じ処理が実行されます。

サンプルコードhereは、起動するための良いサンプルです。

+0

これは完璧です、ありがとうございます! – seinecle

2

一般的なアプローチは、メモリ要件(このすべての情報を格納するために使用する最大RAM)によって、クロールとダウンロードタスクを個別のワーカースレッドに分割することです。

ただし、crawler4jは既にこの機能を提供しています。ダウンロードとクロールを別々のスレッドに分割することで、接続の利用率を最大限に引き出し、接続が処理できるだけのデータを引き込み、情報を提供するサーバーがあなたに送ることができるようにします。これは、1,000スレッドを生成しても、サーバには毎秒0.3kのコンテンツしか提供されないため、ダウンロードする秒当たり300KBのコンテンツしか得られないというのが自然な制限です。しかし、あなたはちょうどそれのその側面を支配していない、私は恐れている。

速度を上げるもう1つの方法は、あなたの最大ダウンロード速度が、私が推測しているところでは、現在データをどれくらい速く得ることができるかという制限要因であるため、より太いパイプを備えたシステムでクローラを実行することです。たとえば、AWSインスタンス(またはクラウドアプリケーションプラットフォーム)でクロールを実行していた場合は、バックボーンへの接続が非常に高速で、メーリングリストのクロールに要する時間が短縮されます。家庭やオフィス接続(ISPで作業している場合を除きます)よりもはるかに広い帯域幅を効果的に拡張します。

パイプが極端に大きい状況では、ローカル(またはネットワーク)ディスクストレージに保存するすべてのデータに対して、ディスクの最大書き込み速度に制限が開始されることが理論的には考えられます。

関連する問題