response.request.meta muutmine muudab Pythoni objekti. Veel ühe allalaadimise jaoks tuleb Scrapyle anda teine Request, mille ajastada.

GET-i puhul, mille teie callback otsustab selgesõnaliselt uuesti proovida, saab Scrapy avalik korduskatse-abistaja hoida korduskatse arvestust uue päringu juures:

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

See on ämbliku abistaja. Kutsuja peab tulemuseks oleva Requesti tagastama või yieldima, kui see on saadaval. None tähendab, et abistaja keeldus veel ühest korduskkatsest kehtiva piiri sees.

Korduskatse-abistaja kopeerib päringu, uuendab selle korduskatse loendurit ja pakub korduskatse jaoks sobivat ajastaja käitumist. Kui yieldida sama URL-i tavalise uue päringuna, võib hoopis sattuda duplikaatide filtreerimisele.

Kasutage puhverserveri URL-i, mida lubatud HttpProxyMiddleware toetab. Lubatud avalike GET-päringute korduskatseteks võib autentimata HTTP-kandidaat HTTP puhverserverite loendist anda proxy_url. Varem lisatud proxy-authorization välja kustutamine hoiab ära vana vahendaja päise kandmise sellesse valikusse; laske middleware'il vajaduse korral uus konto uuest puhverserveri URL-ist tuletada.

Hoidke see callbacki tasandi valik eraldi RetryMiddleware'i automaatsest seadistatud tõrgete käsitlemisest. Otsustage, milline kiht korduskatse omab, et toiming ei kulutaks kahte sõltumatut eelarvet. Näide puudutab korratavat GET-tööd, mitte lubadust, et suvalise esitatud tehingu kordamine on ohutu.

Seotud artiklid