Промена response.request.meta мења Python објекат. Да бисте обавили још једно преузимање, Scrapyју морате дати други Request за заказивање.

За GET за који ваш callback изричито одлучи да га понови, Scrapyјев јавни помоћник за поновни покушај може да задржи обрачун поновних покушаја уз нови захтев:

from scrapy.downloadermiddlewares.retry import get_retry_request

def retry_through(self, response, proxy_url):
    retry = get_retry_request(
        response.request,
        spider=self,
        reason='choose_another_proxy',
    )
    if retry is None:
        return None
    retry.meta['proxy'] = proxy_url
    retry.headers.pop('Proxy-Authorization', None)
    return retry

Ово је помоћник паука. Позивалац мора да врати или yieldује добијени Request када је доступан. None значи да је помоћник одбио још један поновни покушај унутар применљивог ограничења.

Помоћник за поновни покушај копира захтев, ажурира његов број поновних покушаја и пружа понашање планера примерено поновном покушају. Ако само yieldујете исти URL као обичан нови захтев, уместо тога можете наићи на филтрирање дупликата.

Користите прокси URL који подржава омогућени HttpProxyMiddleware. За поновне покушаје дозвољених јавних GET захтева, неаутентификовани HTTP кандидат са списка HTTP проксија може да обезбеди proxy_url. Брисање претходно приложеног поља proxy-authorization спречава преношење заглавља старог посредника у овај избор; пустите middleware да изведе нови налог из новог прокси URL-а када је применљиво.

Држите овај избор на нивоу callback-а одвојеним од аутоматске обраде конфигурисаних кварова RetryMiddleware-а. Одлучите који слој поседује поновни покушај како операција не би трошила два независна буџета. Пример се тиче GET посла који се може поновити, а не обећања да је понављање било које послате трансакције безбедно.

Повезани чланци