Scrapy中间件用多个请求替换单个请求
Scrapy middleware to replace single request with multiple requests
我想要一个中间件,它将接收单个请求并将其转换为两个不同请求的生成器。据我所知,下载器中间件 process_request()
方法只能 return 单个请求,而不是它们的生成器。有没有一种很好的方法可以将任意请求拆分为多个请求?
似乎蜘蛛中间件 process_start_requests
实际上发生在 之后 start_requests
请求是通过下载器发送的。例如,如果我设置 start_urls = ['https://localhost/']
和
def process_start_requests(self, start_requests, spider):
yield Request('https://whosebug.com')
它会失败 ConnectionRefusedError
,已尝试并失败了 localhost
请求。
我不知道将一个请求(在发送之前)转换为多个请求背后的逻辑是什么,但您仍然可以从一个中间件生成多个请求(甚至项目),方法是:
def process_request(self, request, spider):
for a in range(10):
spider.crawler.engine.crawl(
Request(url='myurl', callback=callback_method),
spider)
我想要一个中间件,它将接收单个请求并将其转换为两个不同请求的生成器。据我所知,下载器中间件 process_request()
方法只能 return 单个请求,而不是它们的生成器。有没有一种很好的方法可以将任意请求拆分为多个请求?
似乎蜘蛛中间件 process_start_requests
实际上发生在 之后 start_requests
请求是通过下载器发送的。例如,如果我设置 start_urls = ['https://localhost/']
和
def process_start_requests(self, start_requests, spider):
yield Request('https://whosebug.com')
它会失败 ConnectionRefusedError
,已尝试并失败了 localhost
请求。
我不知道将一个请求(在发送之前)转换为多个请求背后的逻辑是什么,但您仍然可以从一个中间件生成多个请求(甚至项目),方法是:
def process_request(self, request, spider):
for a in range(10):
spider.crawler.engine.crawl(
Request(url='myurl', callback=callback_method),
spider)