在errback中或在302请求的情况下产生项目问题

时间:2012-02-04 21:37:29

标签: python scrapy

我有使用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中知道我无法得到响应对象,但不包含元中的项目的失败对象。

提前致谢

1 个答案:

答案 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重试:

http://readthedocs.org/docs/scrapy/en/latest/topics/downloader-middleware.html#module-scrapy.contrib.downloadermiddleware.retry

lambda应该允许aitem传递给你的错误回调。