response.request.meta z'änneren ännert en Python-Objekt. Fir nach en Download ze maachen, muss een dem Scrapy eng aner Request ginn, déi ee plangt.

Fir eng GET, déi Ären Callback ausdrécklech decidéiert nach eng Kéier ze probéieren, kann dem Scrapy säin ëffentlechen Neiversuch-Helfer d'Neiversuch-Rechnung bei der neier Ufro halen:

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

Dëst ass en Spider-Helfer. Den Opruffer muss déi entstane Request zréckginn oder yielden, wann eng verfügbar ass. None bedeit, datt den Helfer nach en Neiversuch ënner dem gëltege Limit ofgelehnt huet.

Den Neiversuch-Helfer kopéiert d'Ufro, aktualiséiert hiren Neiversuch-Zähler a liwwert d'Verhalen vum Planer, dat fir en Neiversuch passt. Just déiselwecht URL als gewéinlech nei Ufro ze yielden, kann dogéint op d'Duplikatfilterung stoussen.

Benotzt eng Proxy-URL, déi déi aktivéiert HttpProxyMiddleware ënnerstëtzt. Fir Neiversich vun erlaabten ëffentlechen GET-Ufroen kann en net-authentifizéierte HTTP-Kandidat aus der HTTP-Proxy-Lëscht proxy_url liwweren. E virdrun ugehaangent proxy-authorization-Feld ze läschen, verhënnert, datt den Header vun engem ale Vermëttler an dës Auswiel geréit; loosst de Middleware de neien Kont aus der neier Proxy-URL ofleeden, wann dat zoutrëfft.

Halt dës Auswiel op Callback-Niveau getrennt vun der automatescher Behandlung vun de konfiguréierte Feeler duerch RetryMiddleware. Entscheet, wéi eng Schicht den Neiversuch besëtzt, sou datt d'Operatioun net zwee onofhängeg Budgete verbraucht. D'Beispill geet ëm erëmspillbar GET-Aarbecht, net ëm d'Versprieche, datt d'Widderhuele vun enger arbiträrer agereechter Transaktioun sécher ass.

Ähnlech Artikelen