(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
「CONCURRENT_REQUESTS」はすべてのスパイダーをカウントし、全体のフレームワークフレームワークの一般的な設定ですか? – MrKaikev
はい、そうです – eLRuLL