4

特定の Web サイトから有用なリソース (背景画像など) をクロールしたいと考えています。特にスクレイピーのようないくつかの素晴らしいプロジェクトの助けを借りて、それは難しい仕事ではありません.

ここでの問題は、このサイトを 1 回だけクロールしたいだけではないということです。また、クロールを長時間実行し続け、更新されたリソースをクロールしたいと考えています。Webクローラーが更新されたページを取得するための良い戦略はありますか?

これが私が考えた粗いアルゴリズムです。クロール プロセスをラウンドに分割しました。各ラウンド URL リポジトリは、クローラーにクロールする特定の数 (10000 など) の URL を提供します。そして次のラウンド。詳細な手順は次のとおりです。

  1. クローラーが開始 URL を URL リポジトリーに追加する
  2. クローラーは、クロールする最大 N 個の URL を URL リポジトリーに要求します
  3. クローラーは URL をフェッチし、ページ コンテンツ、フェッチ時間、コンテンツが変更されたかどうかなど、URL リポジトリ内の特定の情報を更新します。
  4. ステップ2に戻るだけです

それをさらに特定するには、次の質問を解決する必要があります: この Web ページが更新されている可能性を示す、Web ページの「更新度」を決定する方法は?

これは未解決の問題であるため、ここで実りある議論がもたらされることを願っています。

4

1 に答える 1

7

あなたが説明する「バッチ」アルゴリズムは、これを実装する一般的な方法です

私が取ったアプローチは、スパイダーの開始 URL を初期化して、次のバッチをクロールし、通常どおりデータ (リソース + リンク) を出力することです。次に、次のバッチを生成するために選択したとおりにこれらを処理します。このすべてを並列化することが可能であるため、多くのスパイダーが一度に異なるバッチをクロールすることができます。同じサイトに属する URL を同じバッチに入れると、scrapy が礼儀正しさを処理します (好みに合わせて設定を行います)。

興味深い調整は、スケジューリングを短期 (単一バッチ内、scrapy 内) と長期 (クロール バッチ間) に分割することです。これにより、物事を少し単純に保ちながら、より漸進的なアプローチのいくつかの利点が得られます。

あなたが言及したクロールの順序付けの問題(「更新度」を決定する方法)には多くのアプローチがあり、最良のアプローチは優先順位(鮮度と包括性、他のリソースよりも重要なリソースなど)によって異なります。 .

Christopher Olston と Marc Najork による Web Crawling の記事をお勧めします。これは素晴らしい調査であり、関心のあるトピック (バッチ クロール モデルとクロール順序) をカバーしています。

于 2012-05-18T12:24:27.270 に答える