response.request.meta ಬದಲಿಸುವುದು Python ಆಬ್ಜೆಕ್ಟ್ ಅನ್ನು ಬದಲಿಸುತ್ತದೆ. ಇನ್ನೊಂದು ಡೌನ್‌ಲೋಡ್ ಮಾಡಲು Scrapy ಗೆ ನಿಗದಿಪಡಿಸಲು ಇನ್ನೊಂದು Request ನೀಡಬೇಕು.

ನಿಮ್ಮ callback ಸ್ಪಷ್ಟವಾಗಿ ಮತ್ತೆ ಪ್ರಯತ್ನಿಸಲು ನಿರ್ಧರಿಸುವ GET ಗಾಗಿ, 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 ಕೆಲಸದ ಬಗ್ಗೆ, ಅನಿಯಂತ್ರಿತವಾಗಿ ಸಲ್ಲಿಸಿದ ವಹಿವಾಟನ್ನು ಪುನರಾವರ್ತಿಸುವುದು ಸುರಕ್ಷಿತ ಎಂಬ ಭರವಸೆ ಅಲ್ಲ.

ಸಂಬಂಧಿತ ಲೇಖನಗಳು