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

akh*_*hab 5 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
Run Code Online (Sandbox Code Playgroud)

aitema_url[0]请求之前填充.有时我会得到302,404,301状态,Request所以我想要的是如果我无法从a_url[0]请求项目得到200响应应该让我没有找到任何方法,因为当我得到302 scrapy重试此请求而不是去error_pageerrback ,如果在404中它会转到error_page那里产生项目的方式,因为我在errback中知道我不能得到响应对象但是不包含meta中的项目的失败对象.

提前致谢

Pet*_*vaz 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
Run Code Online (Sandbox Code Playgroud)

dont_retry 应该停止 scrapy 重试:

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

lambda 应允许将 aitem 传递给您的错误回调。