выдача предмета в виде ошибки или в случае запроса 302 - PullRequest
5 голосов
/ 05 февраля 2012

У меня возникла проблема с использованием scrapy * Перед выполнением запроса a_url[0] заполняется

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.Иногда я получаю статус 302, 404, 301 от Request, поэтому я хочу получить ответ 200 от элемента a_url[0], который не может быть найден, потому что, когда я получил 302 повторных цикла с этимзапросить, а не перейти к error_page errback, и если в 404 он перейдет к error_page, какой будет способ получить элемент там, потому что, как я знаю, в errback я не могу получить объект ответа, но объект отказа, который не содержитэлемент в мета.

заранее спасибо

1 Ответ

2 голосов
/ 14 февраля 2012

Вы можете попробовать:

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 должна остановить повторную попытку удаления:

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

Лямбда должна разрешить передачу элемента в вашошибка обратного вызова.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...