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 कामको बारेमा हो, कुनै पनि पेश गरिएको लेनदेन दोहोर्याउनु सुरक्षित छ भन्ने वाचा होइन।

सम्बन्धित लेखहरू