我使用了一个代理池,因此每个请求都被分配了一个不同的代理,其代码类似于以下内容:
class MySpider(BaseSpider):
name = "my_spider"
def __init__(self, *args, **kwargs):
super(MySpider, self).__init__(*args, **kwargs)
self.proxy_pool = ['proxy_address1', 'proxy_address2', ..., 'proxy_addressN']
def parse(self, response):
...parse code...
if something:
yield self.get_request(url)
def get_request(self, url):
req = Request(url=url)
if self.proxy_pool:
req.meta['proxy'] = random.choice(self.proxy_pool)
return req
问题是当错误的代理出现并且连接失败时,隐含的网页将丢失。我想使用其他代理重新启动失败的请求。
可以使用中间件吗?