Ο crawler έχει ρυθμίσει αρκετά ταυτόχρονα αιτήματα. Παρ' όλα αυτά σταματά κάθε φορά που ζητά από το proxy pool άλλη διεύθυνση. Η προσθήκη περισσότερων proxy δεν αγγίζει αυτή τη διακοπή.

Ένα συνηθισμένο μοτίβο middleware καλεί το requests.get(pool_url) μέσα στο process_request(). Πρόκειται για σύγχρονη δικτυακή λειτουργία σε μια διαδρομή που αναμένεται να συνεργάζεται με τον ασύγχρονο μηχανισμό του Scrapy. Όσο η κλήση περιμένει, μπορεί να κρατήσει άσχετη εργασία στο ίδιο νήμα του βρόχου συμβάντων.

Υπάρχουν δύο αιτήματα στην εργασία

Το ένα αίτημα παίρνει ένα endpoint από την υπηρεσία του pool. Το άλλο χρησιμοποιεί αυτό το endpoint για να επικοινωνήσει με τον προορισμό. Μετρήστε και αναφέρετε τα χωριστά. Ένα αργό API του pool μπορεί να κάνει κάθε επιλεγμένο proxy να φαίνεται αργό πριν ακόμη συνδεθεί η εφαρμογή σε αυτό.

Χρησιμοποιήστε μια ενσωμάτωση ασύγχρονης ανακάλυψης που υποστηρίζει η εγκατεστημένη έκδοση του Scrapy, ή αποκτήστε και ανανεώστε ένα περιορισμένο τοπικό σύνολο endpoints έξω από την κρίσιμη διαδρομή κάθε αιτήματος. Αν η μπλοκαριστική εργασία πρέπει να μεταφερθεί, δώστε σε αυτόν τον εκτελεστή τα δικά του όρια και διαχείριση χρονικών ορίων· μια απεριόριστη ουρά απλώς μετατοπίζει την καθυστέρηση.

Μην εκδίδετε αυτόματα άλλη κλήση ανακάλυψης για κάθε αίτημα. Μια βραχύβια cache ή μια μισθωμένη παρτίδα μπορεί να μειώσει την εξάρτηση από την υπηρεσία του pool, αρκεί η διάρκεια ζωής της να ταιριάζει με την πραγματική πολιτική endpoints της υπηρεσίας.

Ορίστε τι σημαίνει αποτυχημένη αναζήτηση

Μια κενή ή αποτυχημένη απάντηση του pool δεν πρέπει να αφαιρεί σιωπηλά τα μεταδεδομένα του proxy και να επιτρέπει απευθείας αίτημα. Επιλέξτε ρητό αποτέλεσμα: αναμονή εντός του προϋπολογισμού της εργασίας, αποτυχία ή χρήση εγκεκριμένου αποθηκευμένου endpoint.

Κρατήστε καθαρή και την ίδια διαδρομή του API του pool. Αν είναι εσωτερική υπηρεσία, η αποστολή του ιδιωτικού hostname της μέσα από το ίδιο το proxy που βοηθά να επιλεγεί μπορεί να δημιουργήσει κυκλική εξάρτηση.

Όταν η ανακάλυψη λειτουργεί χωρίς να μπλοκάρει άσχετη εργασία, εξετάστε τη συνηθισμένη συναλλαγή proxy. Αυτές είναι ξεχωριστές διορθώσεις και ο χρονισμός τους αξίζει ξεχωριστά πεδία στο αρχείο καταγραφής.

Σχετικά άρθρα