私はクローラーに取り組んでおり、「リンクの深さ」が何を意味するのかを正確に理解する必要があります。例を挙げてみましょう: http://wiki.apache.org/nutch/NutchTutorial
深さは、クロールする必要があるルートページからのリンクの深さを示します。
それで、私がドメインを持っていてwww.domain.com
、たとえば、の深さをクロールしたいとします3
-私は何をする必要がありますか?サイトを二分木として表現できれば、問題ないと思います。
私はクローラーに取り組んでおり、「リンクの深さ」が何を意味するのかを正確に理解する必要があります。例を挙げてみましょう: http://wiki.apache.org/nutch/NutchTutorial
深さは、クロールする必要があるルートページからのリンクの深さを示します。
それで、私がドメインを持っていてwww.domain.com
、たとえば、の深さをクロールしたいとします3
-私は何をする必要がありますか?サイトを二分木として表現できれば、問題ないと思います。
リンクの深さは、ページがルートから離れている「ホップ」の数を意味します。「ホップ」は、ページ上のリンクをたどることを意味します。Nutchにこの制限がある理由は、メインページから非常に「遠い」リンクが多くの情報を保持する可能性が低いためです(メインページは最も重要な情報にリンクするため、遠くに行くほど、より詳細な情報が見つかります)、それらは非常に多く存在する可能性があるため、多くのストレージスペース、ランク付けのための計算時間、および帯域幅を消費します。
したがって、Nutchは、深さ制限探索と呼ばれるアルゴリズムスキームを使用して、実行時間とスペース使用量を制限します。このヒューリスティックを使用しなかった場合、サイト全体をクロールして、サイト内のすべてのページをランク付けし、上位Nを見つける必要があります。
深さ3までクロールするには、このアルゴリズムを実装し、深さの境界を3にします。深さ制限探索の良いところは、深さ優先探索(DFS)の変形であるため、スペース効率が非常に高いことです。
function depth-limited-crawl(page p, int d)
if d == 0
return
/* do something with p, store it or so */
foreach (page l in links(p))
depth-limited-crawl(linked, d-1)
いいえ、一般的にサイトを二分木として表すことはできません。有向グラフです。どういうわけかバックリンクを削除すると、それは多方向ツリーになります。いずれにせよ、多くのサイトは大きすぎてクローラー用に保存できません。
「深さ」は、クローラーが「リンクをたどる」回数だと思います。
ルートページから始めたとしましょう。このページの各リンクをたどります。これは深さ1です。ターゲットページごとに、リンクをたどります。これは深さ2などです。
リンクをたどっている間、「サイクル」があるかもしれないことに注意してください。構造は木ではなくグラフです。
www.domain.com, depth 0
それに追加リンクの深さは、特定のリンクに到達する前にたどる必要のあるリンクの数を意味します。
例:example.comは、google.comにリンクしているexample.com/foo.htmlにリンクしています。したがって、google.comのリンクの深さはexample.comに対して2であり、2つのリンクをたどってアクセスできます。
example.comを深さ3までクロールするには、最大深さ3までリンクをたどってから、リンクのたどりを停止します。この制限がなければ、いつまでも簡単に続けることができます。
例:example.comはexample.com/foo.htmlおよびexample.com/bar.htmlにリンクしています。あなたはそれらの2つのリンク、それらがリンクしているリンクをたどり、そこで止まります。
注:ルートページの深さは0です。
Webサイトのルートは深さ0にあります。ルートのリンクを使用して到達できるドキュメントは深さ1にあります。次に、深さ1のドキュメントのリンクから到達できるドキュメントは深さ2になります。
クローラーによっては、これは同じサイト/ドメイン(通常)内のドキュメントまたは他の場所でホストされているドキュメントにのみ適用される場合があります。
「ルート」には3つ以上の「ノード」がある可能性があるため、ほとんどのWebサイトはバイナリツリーで表すことができません。
Nutchの場合、深さの議論はかなり誤解されています。これは、クローラーが通過するループの数を意味します。したがって、シードURLから3リンク離れたページに到達します...特定のサイトでは、深さ3になる可能性があります...つまり、上位Nの制限内に収まっている場合です。
深さはスラッシュの数であり、URLパスです。
例http://www.google.com/foo/bar/bazの深さは3です
def depth(self,link):
return len(urlparse.urlparse(url).path.split("/")) -1