2016-05-26 17 views
0

Crawled X pages (at X pages/min))scrapyの統計を見てみるとすぐ例えば、などと私には思える。:DOWNLOAD_DELAY設定時にCONCURRENT_REQUESTSは無視されますか?

DOWNLOAD_DELAY = 4.5 

は、リクエストが関係なくCONCURRENT_REQUESTS設定が何であるかをシーケンシャルになっていない設定されています。

私の理解では、並列リクエストごとに遅延カウントを行うべきではありませんか、または私は、スクラップアーキテクチャを誤解しましたか?だから私の例ではいけません。

scrapy crawl us_al -a cid_range=000001..000020 

実行速度10の同時要求としていないでは約1分50秒は、それが私のためにしている、(心RANDOMIZE_DOWNLOAD_DELAYに保ちますか)?どうすればその行動を変えることができますか? DOWNLOAD_DELAYがない場合、CONCURRENT_REQUESTS = 5で20個のアイテムを照会すると、4秒とCONCURRENT_REQUESTS = 1秒がかかります。ここで

はクモがどのように見えるかです:

import random 
import re 
import scrapy 

class UsAlSpider(scrapy.Spider): 
    name = "us_al" 
    allowed_domains = ["arc-sos.state.al.us"] 
    start_urls = [] 
    custom_settings = { 
     'CONCURRENT_REQUESTS': 10, 
     'CONCURRENT_REQUESTS_PER_DOMAIN': 10, 
     'DOWNLOAD_DELAY': 4.5 
    } 

    def __init__(self, cid_range=None, *args, **kwargs): 
     """ 
     Range (in the form: 000001..000010) 
     """ 
     super(UsAlSpider, self).__init__(*args, **kwargs) 

     self.cid_range = cid_range 

    def start_requests(self): 
     if self.cid_range and not re.search(r'^\d+\.\.\d+$', self.cid_range): 
      self.logger.error('Check input parameter cid_range={} needs to be in form cid_range=000001..000010'.format(self.cid_range)) 
      return 
     # crawl according to input option 
     id_range = self.cid_range.split('..') 
     shuffled_ids = ["{0:06}".format(i) for i in xrange(
      int(id_range[0]), int(id_range[1]) + 1)] 
     random.shuffle(shuffled_ids) 
     for id_ in shuffled_ids: 
      yield self.make_requests_from_url('http://arc-sos.state.al.us/cgi/corpdetail.mbr/detail?corp={}'.format(id_)) 

    def parse(self, response): 
     # parse the page info 

答えて

1

CONCURRENT_REQUESTSは、一般的に要求を保持するだけの方法ではありませんので、あなたは(通常はドメインによって強制されている)他の設定を使用している場合は、何がありますCONCURRENT_REQUESTSを高い数値に設定すると問題が発生します。

DOWNLOAD_DELAYは、正しいドメインで使用されています。その背景にあるアイデアは、特定のウェブサイトを激しく攻撃することではないからです。これはDOWNLOAD_DELAY>0 -> CONCURRENT_REQUESTS_PER_DOMAIN=1のようにCONCURRENT_REQUESTS_PER_DOMAINにも影響します。

+0

「CONCURRENT_REQUESTS」はすべてのスパイダーをカウントし、全体のフレームワークフレームワークの一般的な設定ですか? – MrKaikev

+0

はい、そうです – eLRuLL

関連する問題