我有一个使用scrapy的问题
yield Request(a_url[0],
meta={'item': aitem}, dont_filter=True,
callback=self.redeem_url, errback=self.error_page)
def redeem_url(self, response):
item = response.request.meta['item']
item['Click_to_Redeem_URL'] = response.url
yield item
Run Code Online (Sandbox Code Playgroud)
aitem在a_url[0]请求之前填充.有时我会得到302,404,301状态,Request所以我想要的是如果我无法从a_url[0]请求项目得到200响应应该让我没有找到任何方法,因为当我得到302 scrapy重试此请求而不是去error_pageerrback ,如果在404中它会转到error_page那里产生项目的方式,因为我在errback中知道我不能得到响应对象但是不包含meta中的项目的失败对象.
提前致谢
你可以尝试:
yield Request(a_url[0],
meta={'item': aitem, 'dont_retry':1}, dont_filter=True,
callback=self.redeem_url,
errback=lambda x:self.error_page(x,aitem))
def redeem_url(self, response):
item = response.request.meta['item']
item['Click_to_Redeem_URL'] = response.url
yield item
Run Code Online (Sandbox Code Playgroud)
dont_retry 应该停止 scrapy 重试:
lambda 应允许将 aitem 传递给您的错误回调。