Ενδιάμεσο λογισμικό διαμεσολαβητή Scrapy: τιμές επιστροφής Request και None
Επιστρέψτε τον έλεγχο αφού ορίσετε έναν διαμεσολαβητή Scrapy, αντί να επαναπρογραμματίσετε κατά λάθος το ίδιο αίτημα πριν το κατεβάσετε.
Η διεύθυνση του διαμεσολαβητή αλλάζει στο αρχείο καταγραφής. Ο προορισμός δεν εμφανίζεται ποτέ στο αρχείο πρόσβασης του διαμεσολαβητή. Ελέγξτε αν το ενδιάμεσο λογισμικό σας αφήνει το αίτημα να φτάσει καθόλου στον μεταφορτωτή.
Στο ενδιάμεσο λογισμικό μεταφορτωτή του Scrapy, η επιστροφή ενός Request σημαίνει επαναπρογραμματισμό αυτού του αιτήματος. Δεν σημαίνει «συνεχίστε να στέλνετε αυτό το αντικείμενο με τα μεταδεδομένα που μόλις άλλαξα».
Για έναν επιλογέα που επιλέγει μόνο μια διαδρομή, η σημαντική μορφή είναι:
def process_request(self, request):
request.meta['proxy'] = self.choose_proxy()
return None
Αυτό το απόσπασμα δείχνει την τρέχουσα μορφή του άγκιστρου· χρησιμοποιήστε τη διεπαφή ενδιάμεσου λογισμικού που υποστηρίζει η εγκατεστημένη έκδοση του Scrapy. Ο επιλογέας πρέπει να επιστρέφει ένα έγκυρο τελικό σημείο και να χειρίζεται ρητά ένα μη διαθέσιμο σύνολο. Μια δημόσια ανίχνευση που επιτρέπει δημόσιους μεσάζοντες μπορεί να αντλεί υποψήφια HTTP από τη λίστα διαμεσολαβητών HTTP για αυτή την τιμή επιστροφής.
Η επιστροφή None επιτρέπει στο υπόλοιπο ενδιάμεσο λογισμικό αιτημάτων και στον μεταφορτωτή να συνεχίσουν. Η επιστροφή άλλου Request είναι χρήσιμη όταν αντικαθιστάτε ή επαναλαμβάνετε εργασία σκόπιμα, αλλά χρειάζεται αιτία και συνθήκη εξόδου.
Ένας περιστροφέας που επιστρέφει το ίδιο αίτημα κάθε φορά μπορεί να εκτελεί επανειλημμένα τον δικό του κώδικα επιλογής χωρίς ποτέ να κάνει σύνδεση με τον προορισμό. Η αύξηση των χρονικών ορίων ή το άνοιγμα περισσότερων θυρών διαμεσολαβητή δεν μπορεί να διορθώσει αυτόν τον βρόχο ροής ελέγχου.
Εξετάστε την είσοδο στο ενδιάμεσο λογισμικό, τη συμπεριφορά επιστροφής και την πρώτη πραγματική δικτυακή απόπειρα ως ξεχωριστά συμβάντα. Μια γραμμή καταγραφής «επιλέχθηκε διαμεσολαβητής» αποδεικνύει μόνο ότι έτρεξε ο επιλογέας. Δεν αποδεικνύει ότι στάλθηκε αίτημα με το επιλεγμένο τελικό σημείο.