2011-07-13 30 views
1

私はいくつかのサイトをデータマイニングするために、Webスクレイピングフレームワーク、scrapyを使用しています。私はCrawlSpiderを使用しようとしており、ページには「戻る」と「次へ」ボタンがあります。 URLは、python/scrapy質問:無限ループを回避する方法

www.qwerty.com/### 

の形式です。###は、次のボタンを押すたびに増加する数字です。無限ループが発生しないようにルールを書式設定するにはどうすればよいですか。

rules = (
     Rule(SgmlLinkExtractor(allow='http://not-a-real-site.com/trunk-framework/791'),follow=True,callback='parse_item', 
    ), 
) 

答えて

7

無限ループが発生しないはずです。

は、ここに私のルールです。 Scrapyは重複したURLをフィルタリングします。

1

あなたはプログラムが無限ループになると思いますが、どのようにテストしましたか? 既に治療を受けている場合、治療はURLをダウンロードしません。すべてのページを通過しようとしましたが、最後のページで次へをクリックするとどうなりますか?

次のリンクが押されるたびにサイトが新しい番号を生成すると、無限ループに陥る可能性があります。ケースはサイトコードが壊れていますが、コード内の最大ページ数に制限を設けて、無期限にループするのを防ぐことができます。

1

次のリンク数に制限を設定できます:DEPTH_LIMITの設定を使用してください。

別の方法としては、解析コールバック関数で現在の深さを確認することができます。

def parse(self, response): 
    if response.meta['depth'] > 100: 
     print 'Loop?' 
関連する問題