Πώς να ρυθμίσετε και να κάνετε rotate proxies στο Python Scrapy
Updated:
Η ασύγχρονη μηχανή Twisted του Scrapy περιλαμβάνει το ενσωματωμένο HttpProxyMiddleware (σε προτεραιότητα 750), το οποίο αναλύει συμβολοσειρές http://user:pass@ip:port που έχουν οριστεί στο request.meta['proxy']. Δημιουργώντας ένα προσαρμοσμένο Downloader Middleware 10 γραμμών σε προτεραιότητα 740, τα spiders σας μπορούν να κάνουν αυτόματα rotate σε ένα pool από unmetered static IPs της VinaProxy.
request.meta['proxy'] = 'http://user:pass@ip:port'- 1 IP40.000 ₫
- 5+ IP35.000 ₫
- 10+ IP25.000 ₫
- 20+ IP25.000 ₫
- 50+ IP25.000 ₫
- 100+ IP25.000 ₫
- 200+ IP25.000 ₫
- 500+ IP25.000 ₫
- 1000+ IP22.000 ₫
- 2000+ IP20.000 ₫
- 1 IP40.000 ₫
- 5+ IP35.000 ₫
- 10+ IP25.000 ₫
- 20+ IP25.000 ₫
- 50+ IP25.000 ₫
- 100+ IP25.000 ₫
- 200+ IP25.000 ₫
- 500+ IP25.000 ₫
- 1000+ IP22.000 ₫
- 2000+ IP20.000 ₫
Σειρά προτεραιότητας Scrapy proxy middleware & ρυθμίσεις ταυτοχρονισμού
Επειδή το HttpProxyMiddleware εκτελείται με σειρά 750 για να αφαιρέσει το user:pass από το URL του proxy και να κωδικοποιήσει την κεφαλίδα Proxy-Authorization, οποιοδήποτε προσαρμοσμένο middleware που ορίζει το request.meta['proxy'] πρέπει να εκτελείται με μικρότερο αριθμό (π.χ. 740):
| Ρύθμιση Scrapy | Προτεινόμενη τιμή | Σκοπός |
|---|---|---|
request.meta['proxy'] | 'http://user:pass@ip:port' | Δρομολογεί το αίτημα μέσω του καθορισμένου VinaProxy proxy |
| Προτεραιότητα Middleware | 740 (πριν από το 750) | Διασφαλίζει ότι το HttpProxyMiddleware κωδικοποιεί την κεφαλίδα user:pass |
CONCURRENT_REQUESTS_PER_IP | 2 έως 4 | Περιορίζει τα ταυτόχρονα sockets ανά IP proxy για την αποφυγή HTTP 429 |
AUTOTHROTTLE_ENABLED | True | Προσαρμόζει δυναμικά την καθυστέρηση crawl βάσει του latency του στόχου |
Βέλτιστες πρακτικές για high-volume crawls στο Scrapy
- Φορτώστε τη λίστα proxy της VinaProxy στη μέθοδο
from_crawler()και ορίστεrequest.meta['proxy'] = random.choice(self.proxies)μέσα στηprocess_request() - Ενεργοποιήστε το
RANDOMIZE_DOWNLOAD_DELAY = Trueμαζί με τοDOWNLOAD_DELAY = 1.0, ώστε τα διαστήματα αιτημάτων ανά IP να μην φαίνονται ποτέ ρομποτικά - Σε περίπτωση επανάληψης (
429ή503), επιλέξτε διαφορετικό proxy από το pool σας πριν προσθέσετε ξανά το αίτημα στην ουρά
Βήμα προς βήμα
- 1
Μορφοποιήστε το proxy pool σας ως http://user:pass@ip:port
Επικολλήστε τη λίστα της VinaProxy στο Proxy Format Converter για να λάβετε συμβολοσειρές URL.
- 2
Δημιουργήστε ένα ProxyPoolMiddleware στο middlewares.py
Ορίστε τη μέθοδο
process_request(self, request, spider)ώστε να θέτειrequest.meta['proxy'] = random.choice(self.proxies). - 3
Δηλώστε το με προτεραιότητα 740 στο settings.py
Προσθέστε το
'myproject.middlewares.ProxyPoolMiddleware': 740κάτω από τοDOWNLOADER_MIDDLEWARESκαι ορίστεCONCURRENT_REQUESTS_PER_IP = 2. - 4
Δοκιμάστε με scrapy shell ή scrapy crawl
Εκτελέστε ένα δοκιμαστικό αίτημα προς το
https://vinaproxy.com/api/my-ipγια να επαληθεύσετε το rotation και το authentication.
Συχνές ερωτήσεις
Γιατί απέτυχε το προσαρμοσμένο Scrapy proxy middleware όταν ορίστηκε σε προτεραιότητα 800;
Το ενσωματωμένο HttpProxyMiddleware του Scrapy εκτελείται με προτεραιότητα 750. Εάν το middleware σας εκτελείται στο 800 (μετά το 750), τα ενσωματωμένα διαπιστευτήρια user:pass δεν μετατρέπονται ποτέ σε κεφαλίδα Proxy-Authorization. Ορίζετε πάντα την προτεραιότητα του middleware σας κάτω από το 750 (όπως 740).
Διατηρεί το Scrapy επίμονες συνδέσεις ανοιχτές προς κάθε proxy;
Ναι. Το connection pool του Twisted διατηρεί επίμονες συνδέσεις keep-alive ανά τελικό σημείο proxy.
Είναι τα proxies της VinaProxy unmetered για εργασίες Scrapy πολλών εκατομμυρίων σελίδων;
Ναι. Όλα τα πλάνα Dedicated IPv4 και Static ISP περιλαμβάνουν απεριόριστο μηνιαίο bandwidth.
Κλιμακώστε τα Scrapy spiders σας με unmetered static IP pools
Άμεσα Dedicated IPv4 και Static ISP proxies σε μεγάλες ποσότητες σε 7 χώρες.
Αγοράστε Scrapy Proxies