Python 设置下载延迟时是否忽略刮擦并发\u请求?
查看scrapy统计数据(Python 设置下载延迟时是否忽略刮擦并发\u请求?,python,scrapy,Python,Scrapy,查看scrapy统计数据(爬网的X页(以X页/分钟))在我看来,似乎只要,例如: DOWNLOAD_DELAY = 4.5 设置后,无论并发\u请求设置如何,请求都将按顺序进行 根据我的理解,延迟不应该计入每个并发请求吗?或者我是否误解了scrapy架构?所以在我的例子中,我们不应该: scrapy crawl us_al -a cid_range=000001..000020 在10个并发请求的情况下运行得更快,而不是在大约1分50秒内(请记住,随机化\u下载\u延迟),这对我来说是什么?
爬网的X页(以X页/分钟)
)在我看来,似乎只要,例如:
DOWNLOAD_DELAY = 4.5
设置后,无论并发\u请求设置如何,请求都将按顺序进行
根据我的理解,延迟不应该计入每个并发请求吗?或者我是否误解了scrapy架构?所以在我的例子中,我们不应该:
scrapy crawl us_al -a cid_range=000001..000020
在10个并发请求的情况下运行得更快,而不是在大约1分50秒内(请记住,随机化\u下载\u延迟
),这对我来说是什么?我将如何改变这种行为?当没有DOWNLOAD\u DELAY
时,用CONCURRENT\u REQUESTS=5
查询20个项目需要4秒,CONCURRENT\u REQUESTS=1
10秒,这种行为对我来说更有意义
下面是蜘蛛的样子:
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
通常只是一种保存请求的方法,因此如果您使用任何其他设置(通常由域强制执行),将CONCURRENT_REQUESTS
设置为一个较高的数字是没有问题的
域名使用了下载延迟
,这是正确的,因为其背后的理念是不要重击特定网站。这也会影响每个域的并发请求数
,就好像下载延迟>0->每个域的并发请求数=1
那么并发请求数
对所有爬行器都有效,是整个scrapy框架的常规设置吗?