Συνδέστε το proxy στα αιτήματα εικόνων του Scrapy
Διακοσμήστε τα Requests που δημιουργεί το ImagesPipeline ώστε οι λήψεις εικόνων να λαμβάνουν proxy χωρίς να ξαναχτιστεί η λογική αιτημάτων του pipeline.
from scrapy.pipelines.images import ImagesPipeline
class ProxiedImagesPipeline(ImagesPipeline):
def get_media_requests(self, item, info):
for request in super().get_media_requests(item, info):
request.meta['proxy'] = 'http://proxy.example:8080'
yield request
Για το Scrapy 2.13.3, αντικαταστήστε την τυπική καταχώριση ImagesPipeline στο ITEM_PIPELINES με τη διαδρομή εισαγωγής αυτής της υποκλάσης. Διατηρήστε το IMAGES_STORE και τις άλλες ρυθμίσεις.
Η κλήση του γονέα διατηρεί το ρυθμισμένο πεδίο URL εικόνας και τα callbacks. Η υποκλάση προσθέτει μόνο τη διαδρομή αιτήματος, την οποία καταναλώνει το ενεργοποιημένο HttpProxyMiddleware. Κάθε URL εικόνας παραμένει ο προορισμός του. Νέα αιτήματα δημόσιων εικόνων χωρίς διαπιστευτήρια proxy μπορούν να χρησιμοποιήσουν μια καταχώριση από τη λίστα proxy HTTP όταν η διαδρομή αυτή επιτρέπεται.
Τα αιτήματα σελίδων διατηρούν τη δική τους πολιτική. Με παγκόσμιο περιβάλλον proxy, το meta={'proxy': None} καθιστά ένα επιλεγμένο αίτημα σελίδας άμεσο σε αυτή την έκδοση.
Ελέγξτε ότι μια λήψη εκδόθηκε πραγματικά. Ένα χτύπημα στην προσωρινή μνήμη του pipeline μπορεί να αποφύγει ένα αίτημα δικτύου. Για νέες μεταφορές, συγκρίνετε τις καταχωρίσεις αποτελεσμάτων ολοκληρωμένων εικόνων με τα ζητούμενα URL: οι επιτυχείς λειτουργίες εμφανίζονται εκεί, ενώ οι αποτυχίες μπορούν να αφήσουν το αρχικό πεδίο URL εικόνας συμπληρωμένο. Εντοπίστε τα αποτελέσματα που λείπουν μέσω των αρχείων καταγραφής του downloader και του επιλεγμένου proxy.