在回调或302请求中出现yield item问题
我在使用 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
在发出 a_url[0]
请求之前,aitem
已经被填充好了。有时候我会收到 302、404、301 这样的状态码,所以我想要的是,如果我从 a_url[0]
请求中得不到 200 的响应,应该把这个项目返回。我找不到办法,因为当我收到 302 时,scrapy 会对这个请求进行重试,而不是直接去 error_page
的错误处理。如果是 404 的话,它会去 error_page
,但我不知道怎么在那边返回项目,因为我知道在错误处理里我拿到的是失败对象,而不是包含项目的响应对象。
提前谢谢你们!
1 个回答
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 传递到你的错误回调函数中。