Middleware proxy w Scrapy: wartości zwracane Request i None
Zwróć kontrolę po przypisaniu proxy w Scrapy, zamiast nieumyślnie planować ponownie tego samego żądania przed jego pobraniem.
Adres proxy zmienia się w logu. Cel nigdy nie pojawia się w logu dostępu proxy. Sprawdź, czy Twój middleware w ogóle przepuszcza żądanie do downloadera.
W middleware downloadera Scrapy zwrócenie Request oznacza ponowne zaplanowanie tego żądania. Nie oznacza „kontynuuj wysyłanie tego obiektu z metadanymi, które właśnie zmieniłem”.
Dla selektora, który wybiera tylko trasę, ważny kształt jest taki:
def process_request(self, request):
request.meta['proxy'] = self.choose_proxy()
return None
Ten fragment pokazuje obecny kształt hooka; użyj interfejsu middleware obsługiwanego przez zainstalowane wydanie Scrapy. Selektor musi zwrócić prawidłowy punkt końcowy i jawnie obsłużyć niedostępną pulę. Publiczny crawl, który dopuszcza publicznych pośredników, może czerpać kandydatów HTTP z listy proxy HTTP dla tej wartości zwracanej.
Zwrócenie None pozwala reszcie middleware żądań i downloaderowi kontynuować. Zwrócenie innego Request jest przydatne, gdy świadomie zastępujesz lub ponawiasz pracę, ale wymaga powodu i warunku wyjścia.
Rotator, który za każdym razem zwraca to samo żądanie, może wielokrotnie uruchamiać własny kod wyboru, nigdy nie nawiązując połączenia z celem. Zwiększanie limitów czasu lub otwieranie kolejnych portów proxy nie naprawi tej pętli przepływu sterowania.
Badaj wejście do middleware, zachowanie przy zwracaniu i pierwszą rzeczywistą próbę sieciową jako osobne zdarzenia. Wiersz logu „wybrano proxy” dowodzi tylko, że selektor zadziałał. Nie dowodzi, że wysłano żądanie z wybranym punktem końcowym.