2011-12-05 9 views
4

非常に基本的な方法でサイトをクロールしようとしています。しかし、Scrapyはすべてのリンクをクロールしていません。 follows-すべてのページをクロールしないでください。

がmain_page.htmlように私はシナリオを説明します - >、b_page.htmlをa_page.htmlへのリンクが含まれているc_page.html、
a_page.html - > a1_page.htmlへのリンクが含まれ、a2_page.html
b_page.html - >がb1_page.htmlへのリンクが含まれ、
c_page.html b2_page.html - > c1_page.htmlへのリンクが含まれ、c2_page.html
a1_page.html - >は
a2_page.htmlをb_page.htmlするためのリンクが含まれています - > c_page.htmlへのリンクが含まれています
b1_page.html - > a_page.htmlへのリンクが含まれています
b2_page.html - > c_page.htmlへのリンクが含まれています c1_page.html - >私はCrawlSpiderに以下のルールを使用しています

をmain_page.htmlするためのリンクが含まれています - - >
c2_page.htmlをa_page.htmlするためのリンクが含まれてい

Rule(SgmlLinkExtractor(allow =()), callback = 'parse_item', follow = True))

しかし、次のようにクロールの結果である -

DEBUG:クロール(200)のhttp://localhost/main_page.html>(リファラー: なし)2011-12-05 09:56:05 + 07 [test_spider] DEBUG:クロール済み(200)http://localhost/a_page.html>(referer: http://localhost/main_page.html)2011-12-05 09:56:07 + 0530 [test_spider] DEBUG:クロール済み//localhost/a1_page.html> (referer:http://localhost/a_page.html)2011-12-05 09:56:07 + 0530 [test_spider] DEBUG:クロール済み(200)http://localhost/b_page.html> (referer: http://localhost/a1_page.html)2011-12-05 09:56:07 + 0530 [test_spider]デバッグ:クロール済み(200)http://localhost/b1_page.html> (referer:http://localhost/b_page.html)2011-12-05 09:56:07 +0530 [test_spider]情報:閉鎖スパイダー(終了)

すべてのページをクロールしていません。

NB - Scrapy Docに記載されているように、私はBFOでクロールを行いました。

私には何が欠けていますか?

答えて

3

私はカスタムスパイダーを使っていましたが、今日も同様の問題がありました。 私のユーザエージェントが厄介なボットだったので、ウェブサイトがクロールを制限していたことが判明しました。

ユーザエージェントを変更してもう一度お試しください。おそらく既知のブラウザのそれに変更してください。

もう1つのことは、遅延を追加することです。いくつかのウェブサイトでは、要求の間の時間が小さすぎると擦れを防止します。 2のDOWNLOAD_DELAYを追加してみてください、それは、デフォルトですべての重複要求をフィルタリングします http://doc.scrapy.org/en/0.14/topics/settings.html

+0

ありがとうございました。私はダウンロードの遅延を追加しようとしています。しかし、私が例として取ったサイトは、localhost上で実行され、単なる単純なリンクで構成されています。 – Siddharth

+0

いいえ、その仕事はありませんでした。 scrapyが印刷する統計では、私はこのようなものを得ています。 'request_depth_max':5、 – Siddharth

+0

あなたはDepthMiddlewareを使用している場合があります http://readthedocs.org/docs/scrapy/en/latest/topics/spider-middleware.html 実際DepthMiddlewareセクション – CodeMonkeyB

5

ScrapyでDOWNLOAD_DELAYについて

詳しい情報が役立ちますかどうかを確認します。

あなたは(例)を使用してこれを回避することができます

yield Request(url="test.com", callback=self.callback, dont_filter = True) 

dont_filter(ブール値) - この要求は、スケジューラによって フィルタリングすべきではないことを示しています。 同一の要求を複数回実行して、重複フィルタを無視する場合に使用します。 を慎重に使用してください。そうしないと、クロールループに入ります。デフォルトはFalseです。

またRequest object documentation

+0

はい、私はそれを読んでいました。しかし、あなたはそれが問題ではないことがわかるでしょう。問題は、複製の問題ではなく、すべてのページをクロールしていないことです。しかし、答えに感謝します。私はまた重複の問題を探していました。 – Siddharth

+0

私は何らかのウェブでそれを視覚化しなければ、それが行った道を理解するのはちょっと難しいです:-D - しかし、ある点で重複したページを除外している気がします。私はまだdont_filterオプションを試してみたいと思います。他の理由は考えられません。ソースhtml/spiderを見ることなく、残りのページを削ってしまうことはありません。 –

+0

はい、私はFalseにdont_filterオプションを使用してみましたが、その方法でもうまく動作しません。 – Siddharth

0

はたぶんURLの多くは重複してご覧ください。それは効率が悪いので、重複を避けてください。もちろん、URLのルールに従っているので、あなたの説明からわかるように、重複がたくさんあります。

ログに証拠を表示したい場合は、settings.pyに追加してください。

DUPEFILTER_DEBUG = True 

そして、あなたはログにラインのこの種を見ることができます:

2016年9月20日午後5時08分47秒[scrapy] DEBUG:フィルタ重複要求します。http:// WWW .example.org/example.html>

関連する問題