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

ਇਹ ਇੱਕ spider ਸਹਾਇਕ ਹੈ। ਕਾਲ ਕਰਨ ਵਾਲੇ ਨੂੰ ਨਤੀਜਾ Request ਉਪਲਬਧ ਹੋਣ 'ਤੇ ਵਾਪਸ ਦੇਣਾ ਜਾਂ yield ਕਰਨਾ ਚਾਹੀਦਾ ਹੈ। None ਦਾ ਮਤਲਬ ਹੈ ਕਿ ਸਹਾਇਕ ਨੇ ਲਾਗੂ ਸੀਮਾ ਵਿੱਚ ਇੱਕ ਹੋਰ ਦੁਬਾਰਾ ਕੋਸ਼ਿਸ਼ ਇਨਕਾਰ ਕੀਤੀ।

ਦੁਬਾਰਾ ਕੋਸ਼ਿਸ਼ ਸਹਾਇਕ ਬੇਨਤੀ ਦੀ ਨਕਲ ਬਣਾਉਂਦਾ ਹੈ, ਇਸਦਾ ਦੁਬਾਰਾ ਕੋਸ਼ਿਸ਼ ਗਿਣਕ ਅੱਪਡੇਟ ਕਰਦਾ ਹੈ ਅਤੇ ਦੁਬਾਰਾ ਕੋਸ਼ਿਸ਼ ਲਈ ਢੁਕਵਾਂ ਸ਼ਡਿਊਲਰ ਵਿਵਹਾਰ ਦਿੰਦਾ ਹੈ। ਉਹੀ URL ਆਮ ਨਵੀਂ ਬੇਨਤੀ ਵਜੋਂ yield ਕਰਨ ਨਾਲ ਇਸਦੀ ਥਾਂ ਨਕਲ ਫਿਲਟਰਿੰਗ ਮਿਲ ਸਕਦੀ ਹੈ।

ਸਰਗਰਮ HttpProxyMiddleware ਵੱਲੋਂ ਸਮਰਥਿਤ ਪ੍ਰੌਕਸੀ URL ਵਰਤੋ। ਮਨਜ਼ੂਰ ਜਨਤਕ GET ਬੇਨਤੀਆਂ ਦੀ ਦੁਬਾਰਾ ਕੋਸ਼ਿਸ਼ ਲਈ, HTTP ਪ੍ਰੌਕਸੀ ਸੂਚੀ ਤੋਂ ਬਿਨਾਂ ਪ੍ਰਮਾਣਿਕਤਾ ਵਾਲਾ HTTP ਉਮੀਦਵਾਰ proxy_url ਦੇ ਸਕਦਾ ਹੈ। ਪਹਿਲਾਂ ਜੁੜੀ proxy-authorization ਫੀਲਡ ਸਾਫ਼ ਕਰਨ ਨਾਲ ਪੁਰਾਣੇ ਵਿਚੋਲੇ ਦਾ ਹੈਡਰ ਇਸ ਚੋਣ ਵਿੱਚ ਨਹੀਂ ਜਾਂਦਾ; ਜਿੱਥੇ ਲਾਗੂ ਹੋਵੇ, ਮਿਡਲਵੇਅਰ ਨੂੰ ਨਵੀਂ ਪ੍ਰੌਕਸੀ URL ਤੋਂ ਨਵਾਂ ਖਾਤਾ ਲੈਣ ਦਿਓ।

ਇਸ callback-ਪੱਧਰੀ ਚੋਣ ਨੂੰ RetryMiddleware ਵੱਲੋਂ ਆਪਣੀਆਂ ਸੰਰਚਿਤ ਅਸਫਲਤਾਵਾਂ ਦੇ ਸਵੈਚਾਲਿਤ ਪ੍ਰਬੰਧਨ ਤੋਂ ਵੱਖ ਰੱਖੋ। ਤੈਅ ਕਰੋ ਕਿ ਦੁਬਾਰਾ ਕੋਸ਼ਿਸ਼ ਕਿਸ ਪਰਤ ਦੀ ਹੈ ਤਾਂ ਜੋ ਕਾਰਵਾਈ ਦੋ ਸੁਤੰਤਰ ਬਜਟ ਖਰਚ ਨਾ ਕਰੇ। ਉਦਾਹਰਨ ਦੁਬਾਰਾ ਚਲਾਉਣਯੋਗ GET ਕੰਮ ਬਾਰੇ ਹੈ, ਇਹ ਵਾਅਦਾ ਨਹੀਂ ਕਿ ਕੋਈ ਵੀ ਜਮ੍ਹਾਂ ਕੀਤਾ ਲੈਣ-ਦੇਣ ਦੁਹਰਾਉਣਾ ਸੁਰੱਖਿਅਤ ਹੈ।

ਸੰਬੰਧਿਤ ਲੇਖ