我有使用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
在执行aitem
请求之前填充了 a_url[0]
。有时我会从Request
获得302,404,301状态,所以我想要的是如果我无法从a_url[0]
请求项目得到200响应应该让我没有找到任何方法,因为当我得到302时scrapy重试这个请求,而不是去error_page
errback,如果在404,它会转到error_page
什么是在那里产生项目的方式,因为我在errback中知道我无法得到响应对象,但不包含元中的项目的失败对象。
提前致谢
答案 0 :(得分:2)
你可以尝试:
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
dont_retry应该停止scrapy重试:
lambda应该允许aitem传递给你的错误回调。