2017-09-12 22 views
1

私はBeautiful Soupをサイトの1ページをクロールするのに大成功を収めましたが、サイトの大きなリストをチェックして自分のサイトへの言及やリンクが含まれているかどうかを確認する新しいプロジェクトがあります。したがって、私は各サイトのサイト全体をチェックする必要があります。Scrapyはサイト全体をクロールしたときに「認識」していますか?

BSでは、スクレイパーにサイトで行われたことを伝える方法がまだわからないので、再帰の制限にぶつかっています。それは何かがScrapyが箱から取り除くのですか?

答えて

2

Scrapyは、利用可能なリンクのリストがなくなるまで、サイトを横断するリンクのフォロワーを使用しています。ページが訪問されると、そのページはリストから削除され、Scrapyはそのリンクが再度訪問されないようにします。

すべてのウェブサイトページが他のページにリンクしていると仮定すると、Scrapyはウェブサイトのすべてのページを閲覧できます。

私は、何千ものウェブサイト(主に中小企業)を横断するためにScrapyを使用しましたが、問題はありませんでした。それはサイト全体を歩くことができます。

+0

あなたの答えをありがとう。私が見ているドキュメントやチュートリアルは、1つのドメインをクロールするためのものです。ドメインの一覧をどのようにクロールするのかを知っていますか?たぶん、私はちょうど適切なキーワードを使用していないです。 –

+0

私はこのチュートリアル(https://www.youtube.com/watch?v=nnnDshuflSI)を使用します。これは、あなたが構築するための素晴らしいフレームワークを提供します。あなたの時間をかけて、彼が教えていることを学びなさい。彼はScrapyと一緒に働くので、その素晴らしいチュートリアルです。 –

+0

ありがとう、私はそれをチェックアウトします。 –

1

私は恐れています。サイト全体をクロールするのは誰も知りません。たとえば、Facebook全体をクロールしたときに言うことができますか?これは、動的に生成され、リンクされたページであるためです。

再帰制限を設定することは、境界線を計画する唯一の方法です。その後、移動を停止します。しかし、重複するページの数を最小限に抑えることができます。ページリンクまたはページテキストのCRCを識別子として使用して、それが一意であるかどうかを調べることができます。

あなたはparse方法でこのような何かを行うことができます。

if some_id not in set_of_all_page_ids: 
    set_of_all_page_ids.add(some_id) 
    yield scrapy.Request(response.urljoin(next_page_url)) 
関連する問題