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-ის დამხმარეა. გამომძახებელმა უნდა დააბრუნოს ან yield გააკეთოს მიღებული Request-ისა, როცა ის ხელმისაწვდომია. None ნიშნავს, რომ დამხმარემ უარი თქვა კიდევ ერთ ხელახალ ცდაზე მოქმედი ლიმიტის ფარგლებში.

ხელახალი ცდის დამხმარე აკოპირებს მოთხოვნას, აახლებს მის ხელახალი ცდის მთვლელს და უზრუნველყოფს ხელახალი ცდისთვის შესაფერისი დამგეგმავის ქცევას. იმავე URL-ის ჩვეულებრივ ახალ მოთხოვნად yield-ით შეიძლება ნაცვლად დუბლიკატების ფილტრაციას წააწყდეთ.

გამოიყენეთ პროქსის URL, რომელსაც ჩართული HttpProxyMiddleware მხარს უჭერს. დაშვებული საჯარო GET მოთხოვნების ხელახალი ცდისთვის, HTTP პროქსების სიიდან აუთენტიფიკაციის გარეშე HTTP კანდიდატმა შეიძლება მოგვცეს proxy_url. ადრე მიმაგრებული proxy-authorization ველის გასუფთავება ხელს უშლის ძველი შუამავლის სათაურის ამ არჩევანში გადატანას; მიეცით middleware-ს ახალი ანგარიშის გამოყვანის საშუალება ახალი პროქსის URL-იდან, როცა ეს შესაბამისია.

შეინარჩუნეთ ეს callback-დონის არჩევანი განცალკევებით RetryMiddleware-ის მიერ მისი კონფიგურირებული ჩავარდნების ავტომატური დამუშავებისგან. გადაწყვიტეთ, რომელი ფენა ფლობს ხელახალ ცდას, რათა ოპერაციამ ორი დამოუკიდებელი ბიუჯეტი არ დახარჯოს. მაგალითი ეხება განმეორებად GET სამუშაოს და არა დაპირებას, რომ თვითნებურად გაგზავნილი ტრანზაქციის გამეორება უსაფრთხოა.

დაკავშირებული სტატიები