Að breyta response.request.meta breytir Python-hlut. Til að sækja aftur þarf að gefa Scrapy aðra Request til að tímasetja.

Fyrir GET sem callback þitt ákveður beinlínis að endurtaka, getur opinberi endurtökuhjálpari Scrapy haldið endurtökureikningnum með nýju beiðninni:

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

Þetta er kóngulóarhjálpari. Kallsaðilinn verður að skila eða yielda Request-inu sem verður til þegar eitt er tiltækt. None þýðir að hjálparinn hafnaði annarri endurtöku innan gildandi marka.

Endurtökuhjálparinn afritar beiðnina, uppfærir endurtökuteljarann og veitir hegðun röðara sem hentar endurtöku. Að yielda sama URL sem venjulegri nýrri beiðni getur í staðinn rekist á afritunarsíun.

Notaðu proxy-URL sem virki HttpProxyMiddleware styður. Fyrir endurtökur leyfilegra opinberra GET-beiðna getur óstaðfest HTTP-frambjóðandi úr HTTP-proxylistanum veitt proxy_url. Að hreinsa áður viðhengd proxy-authorization svæði kemur í veg fyrir að haus gamals milliliðar berist inn í þetta val; leyfðu middleware að leiða nýja reikninginn af nýja proxy-URL-inu þegar við á.

Haltu þessu vali á callback-stigi aðskildu frá sjálfvirkri meðferð RetryMiddleware á skilgreindum mistökum þess. Ákveddu hvaða lag á endurtökuna svo aðgerðin eyði ekki tveimur óháðum fjárhagsáætlunum. Dæmið varðar endurtekið GET-vinnu, ekki loforð um að endurtaka handahófskenndri sendri færslu sé öruggt.

Tengdir greinar