Scrapy GET-ის ხელახლა ცდა სხვა პროქსის მეშვეობით
გამოიყენეთ Scrapy-ის ხელახალი ცდის დამხმარე ახალი მოთხოვნის დასაგეგმად ახალი პროქსით, ხელახალი ცდის ბიუჯეტის დაცვით.
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 სამუშაოს და არა დაპირებას, რომ თვითნებურად გაგზავნილი ტრანზაქციის გამეორება უსაფრთხოა.