URL 重複排除と Web サイトのクローリング管理に PHP ブルーム フィルターを使用する方法
概要:
Web サイトをクロールする場合、重要なタスクは、同じページを繰り返しクロールすることでリソースが浪費され、時間。ブルーム フィルターは、大規模なセット内に要素が存在するかどうかを迅速に判断するのに適した効率的なデータ構造です。この記事では、PHP Bloom フィルターを使用して URL 重複排除と Web サイトのクローリング管理を行う方法を紹介します。
ブルーム フィルター拡張機能のインストール
まず、PHP ブルーム フィルター拡張機能をインストールする必要があります。次のコマンドで PECL を使用してインストールできます:
$ pecl install bloom_filter
インストールが完了したら、php.ini ファイルに拡張子を追加する必要があります:
extension=bloom_filter.so
ブルーム フィルタ オブジェクトの作成
ブルーム フィルタを使用する前に、ブルーム フィルタ オブジェクトを作成する必要があります。 bloom_filter_new
関数を使用して、新しいブルーム フィルターを作成できます。
$false_positive_rate = 0.01; // 误判率 $estimated_element_count = 100000; // 预计元素个数 $filter = bloom_filter_new($false_positive_rate, $estimated_element_count);
ブルーム フィルターに URL を追加
Web サイトをクロールするとき、新しい URL が作成されるたびに、が得られたら、それをブルーム フィルターに追加する必要があります。 bloom_filter_add
関数を使用して、以下を追加できます。
$url = "http://example.com"; if (!bloom_filter_add($filter, $url)) { // URL已存在,不需要进行爬取 return; }
注: ブルーム フィルターが URL が存在する可能性があると判断した場合、その URL は「存在する可能性がある」ため、一定の確率で URL が存在する可能性があります。コード内で追加の判断が必要です。
URL がすでに存在するかどうかを確認する
URL を追加する前に、繰り返しの追加を避けるために、URL がブルーム フィルターにすでに存在するかどうかを確認する必要があります。 bloom_filter_contains
関数を使用して、次のことを決定できます。
$url = "http://example.com"; if (bloom_filter_contains($filter, $url)) { // URL已存在,不需要再次添加 return; }
Web サイト クロール管理の例
次は、PHP ブルーム フィルターの使用方法を示す簡単な例です。 Web サイトのクローリング管理:
$false_positive_rate = 0.01; // 误判率 $estimated_element_count = 100000; // 预计元素个数 $filter = bloom_filter_new($false_positive_rate, $estimated_element_count); function crawl_website($url) { // 如果URL已存在于布隆过滤器中,则不需要进行爬取 if (bloom_filter_contains($filter, $url)) { return; } // 进行网站爬取操作 // 将URL添加到布隆过滤器中 bloom_filter_add($filter, $url); }
結論:
PHP ブルーム フィルターを使用して、クロールされた Web サイトの URL をすばやく重複排除して管理します。ブルームフィルター判定を追加することで、同じURLを繰り返しクロールすることを回避し、クロール効率を向上させることができます。実際のアプリケーションでは、メモリ フットプリントとブルーム フィルターの精度のバランスを取るために、実際のニーズに応じて誤検知率と予想される要素数を調整できます。
以上がURL 重複排除と Web サイトのクローリング管理に PHP ブルーム フィルターを使用する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。