Scrapy:等待请求完成后再执行下一个请求

um6iljoc  于 2023-01-09  发布在  其他
关注(0)|答案(1)|浏览(292)

我有下面的蜘蛛,基本上要求开始_网址和每个网址在那里,它必须做许多子请求。

def parse(self, response): 
    print(response.request.headers['User-Agent'])

    for info in response.css('div.infolist'):

        item = MasterdataScraperItem()
        
        info_url = BASE_URL + info.css('a::attr(href)').get() # URL to subpage
        print('Subpage: ' + info_url)
    
        item['name'] = info.css('img::attr(alt)').get()
        
        yield scrapy.Request(info_url, callback=self.parse_info, meta={'item': item})

上面代码中的for循环运行了大约200次,在大约100次迭代之后,我得到了HTTP代码429。
我的想法是将DOWNLOAD_DELAY设置为3.0,但不知何故,这并不适用于循环和scrapy。请求只是直接调用了几百次。
有没有办法在调用scraby.requests的下一次迭代之前等待n秒?

uhry853o

uhry853o1#

您可以使用CONCURRENT_REQUESTS限制下载程序同时处理的请求数

class MySpider(scrapy.Spider):
    custom_settings = {
        "CONCURRENT_REQUESTS": 1,
    }
    # Rest of code

相关问题