Bidla f'response.request.meta tbiddel oġġett Python. Biex tagħmel download ieħor, trid tagħti lil Scrapy Request ieħor biex jiġi ppjanat.

Għal GET li l-callback tiegħek jiddeċiedi b'mod espliċitu li jerġa' jipprova, l-għajnuna pubblika ta' provatura mill-ġdid ta' Scrapy tista' żżomm il-kont tal-provi mill-ġdid mat-talba l-ġdida:

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

Din hija għajnuna għall-spider. Min isejjaħ irid jirritorna jew jagħmel yield tar-Request li tirriżulta meta tkun disponibbli. None ifisser li l-għajnuna rrifjutat provatura mill-ġdid oħra fil-limitu applikabbli.

L-għajnuna ta' provatura mill-ġdid tikkopja t-talba, taġġorna l-għadd tal-provi mill-ġdid tagħha u tipprovdi l-imġiba tal-iskedar xierqa għal provatura mill-ġdid. Li sempliċement tagħmel yield tal-istess URL bħala talba ġdida ordinarja tista' minflok tiltaqa' ma' filtrazzjoni ta' duplikati.

Uża URL ta' proxy appoġġjat mill-HttpProxyMiddleware attivat. Għal provi mill-ġdid ta' talbiet GET pubbliċi permessi, kandidat HTTP mhux awtentikat mil-lista tal-proxy HTTP jista' jipprovdi proxy_url. It-tindif ta' qasam proxy-authorization imwaħħal qabel jevita li testata ta' intermedjarju antik tinġarr f'din l-għażla; ħalli l-middleware jiddeduċi l-kont il-ġdid mill-URL tal-proxy l-ġdid meta japplika.

Żomm din l-għażla fil-livell tal-callback separata mill-immaniġġjar awtomatiku ta' RetryMiddleware tal-fallimenti kkonfigurati tiegħu. Iddeċiedi liema saff jippossjedi l-prova mill-ġdid biex l-operazzjoni ma tikkonsmax żewġ baġits indipendenti. L-eżempju jikkonċerna xogħol GET li jista' jerġa' jintlagħab, mhux wegħda li t-treġġigħ lura ta' transazzjoni sottomessa arbitrarjament hija sikura.

Artikli relatati