Scrapy中间件用多个请求替换单个请求

时间:2017-07-11 03:24:44

标签: python scrapy twisted

我想要一个中间件,它将接受一个请求并将其转换为两个不同请求的生成器。据我所知,下载器中间件process_request()方法只能返回一个Request,而不能返回它们的生成器。有没有一种很好的方法将任意请求拆分成多个请求?

process_start_requests请求通过下载程序发送后,似乎蜘蛛中间件start_requests实际上发生了。例如,如果我设置start_urls = ['https://localhost/']

def process_start_requests(self, start_requests, spider):
   yield Request('https://stackoverflow.com')

ConnectionRefusedError请求尝试失败后,localhost将失败。

1 个答案:

答案 0 :(得分:2)

我不知道将请求(在发送之前)转换为多个请求背后的逻辑是什么,但您仍然可以从中间件生成多个请求(甚至是项目),其中包含:

def process_request(self, request, spider):
    for a in range(10):
        spider.crawler.engine.crawl(
            Request(url='myurl', callback=callback_method), 
            spider)