Attacher le proxy aux requêtes d'images de Scrapy
Décorez les Requests créées par ImagesPipeline pour que les téléchargements d'images reçoivent un proxy sans reconstruire la logique de requêtes du 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
Pour Scrapy 2.13.3, remplacez l'entrée ImagesPipeline standard dans ITEM_PIPELINES par le chemin d'import de cette sous-classe. Conservez IMAGES_STORE et les autres réglages.
L'appel au parent préserve son champ d'URL d'image et ses callbacks configurés. La sous-classe n'ajoute que la route de requête, que consomme HttpProxyMiddleware activé. Chaque URL d'image reste sa destination. Les nouvelles requêtes d'images publiques sans identifiants de proxy peuvent utiliser une entrée de la liste de proxys HTTP lorsque cette route est autorisée.
Les requêtes de page gardent leur propre politique. Avec un environnement proxy global, meta={'proxy': None} rend directe une requête de page choisie dans cette version.
Vérifiez qu'un téléchargement a bien été émis. Un succès de cache du pipeline peut éviter une requête réseau. Pour les nouveaux transferts, comparez les entrées de résultat d'image terminée avec les URL demandées : les opérations réussies y apparaissent, tandis que les échecs peuvent laisser le champ d'URL d'image d'origine rempli. Suivez les résultats manquants dans les journaux du téléchargeur et le proxy choisi.