2012-05-07 3 views
1

こんにちは!私はルートアドレスから始まり、すべての見つかったリンク(内部リンクのみ)をクロールするWebサイトクローラーを作成します。そこで、私はこの問題に直面しています。 クローラはルートから開始しなければならず、次にウェブページ(ルートページ)を解析してすべてのリンクを取得する必要があります。リンクを取得している間は、同じページを2回クロールしないでください。みんな良いデータ構造があるのですか、SQLや他のインデックスデータ構造を使う必要がありますか?クローラのデータ構造

答えて

1

私はここに私の答えをチェックアウトしてお勧めします:Designing a web crawlerHow can I bring google-like recrawling in my application(web or console)

私はあなたが求めている多くの質問に答えました。この問題を解決するために重要なのは、リンクをクロールする必要があるかどうかを効率的に判断するために、クローラはURL-Seen Testを使用することです。 URL-Seen Testは通常、キー(URL)を迅速に解決するマップ構造を使用して実装されます。よく使用されるソリューションは、leveldb、berkeleydb、およびその他のNOSQLソリューションなどの組み込みデータベースです。

4

おそらく探しているデータ構造はTreeです。

しかし、クローラの場合は、ルートから開始して、訪問したURLの「リスト」を維持することができ、リンクをたどりつぶすたびに、それが遭遇したかどうかをチェックするので、前。遭遇していない場合は、リストに追加してそれに従います。

文字通りリスト(すなわち配列)である必要はありませんが、それはdictionaryまたは検索の高速化に役立つその他のデータ構造になります。

また、SQLデータベースなど、redisのようなKey-Valueストレージのようなものでもかまいません。このようなものを使用すると、標準的な方法(SQL、特別なAPI、その他)で通信できるデータベースシステムによって、すべての索引付けと問合せが行われます。

しかし、これは簡単なことですが、「クロール」で考慮する必要があります。まず、already available crawlerで実行しようとしていることを確認してください。