2

この設計上の質問にぶつかったとき、私はphpでスクレーパーとスパイダーを構築していました。クモのクロールとスクレイピングのタスクを分離するシステム (ほとんどのプロのシステムがそうであるように) を作成することと、クモがクロールするときにスクレイピングを行うシステムを作成することとの間のトレードオフについて疑問に思っていました。私が考えることができる唯一のことは、それを分割してキューを使用することで、スクレイピングする次のページをキューに尋ねるだけでよい複数のスクレイパーを用意することで、タスクをより適切に並列化できるということです。誰かが他のトレードオフを考えて、これらが通常 2 つのプログラムに分かれている主な理由を説明できますか?

注: クロールの順序はどちらの場合も同じです。唯一の違いは、ページがプルされるタイミングです。

4

1 に答える 1

2

クローラーがページを取得し、スパイダーがそれらを処理します。これらのタスクを別々にしておくと、他のタスクを変更せずに、1 つのタスクの実装を変更できます。これが、それらが分離されている理由です。これは単に優れたソフトウェア設計です。

あなたが与える例は良いものです:単一のクラス/モジュール/プログラム/関数/何でも処理と取得を組み合わせる場合、ページの取得方法の変更(たとえば、並列取得、プロキシを介した取得など)には書き直しが必要ですプログラム全体。

もう 1 つ: 別の種類のデータ (たとえば、html ページの代わりに rss フィード) を処理する場合は、スクレーパー全体を最初から作成する必要があり、ページ取得で行った作業を再利用することはできません。

于 2012-04-16T06:15:34.147 に答える