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

Untuk Scrapy 2.13.3, gantikan entri ImagesPipeline standard dalam ITEM_PIPELINES dengan laluan import subkelas ini. Kekalkan IMAGES_STORE dan tetapan lain.

Memanggil induk mengekalkan medan URL imej dan panggil balik yang dikonfigurasikan. Subkelas hanya menambah laluan permintaan, yang digunakan HttpProxyMiddleware yang didayakan. Setiap URL imej kekal sebagai destinasinya. Permintaan imej awam baharu tanpa kelayakan proksi boleh menggunakan entri daripada senarai proksi HTTP apabila laluan itu dibenarkan.

Permintaan halaman mengekalkan dasar mereka sendiri. Dengan persekitaran proksi global, meta={'proxy': None} menjadikan permintaan halaman terpilih terus dalam keluaran ini.

Periksa sama ada muat turun benar-benar dikeluarkan. Cache saluran paip yang terkena boleh mengelakkan permintaan rangkaian. Untuk pemindahan baharu, bandingkan entri hasil imej selesai dengan URL yang diminta: operasi berjaya muncul di sana, manakala kegagalan boleh membiarkan medan URL imej asal terisi. Jejaki hasil yang hilang melalui log pemuat turun dan proksi yang dipilih.

Artikel berkaitan