
Les avantages complémentaires du sélénium et du scrapy
Dans le développement de crawlers, Selenium et Scrapy sont deux outils courants, chacun avec son propre objectif ; Scrapy est un cadre de crawler asynchrone efficace qui se spécialise dans l'exploration de données structurées rapidement et à grande échelle. Selenium, quant à lui, est un outil d'automatisation du navigateur qui peut simuler les actions d'utilisateurs réels, ce qui est parfait pour les pages qui doivent exécuter du JavaScript ou gérer des interactions complexes.
Scrapy joue le rôle de "centre de programmation" et de "pipeline de traitement des données" du système, chargé de gérer la file d'attente des requêtes et d'analyser les données ; lorsqu'il rencontre une page difficile à traiter directement par Scrapy, la requête est transmise au "browser worker" de Selenium par l'intermédiaire d'un logiciel intermédiaire pour être exécutée. Lorsqu'il rencontre une page difficile à traiter directement par Scrapy, la requête est transmise au "browser worker" de Selenium pour être exécutée par le biais d'un middleware. L'un des principaux défis de cette architecture est de savoir comment intégrer les IP proxy pour ces deux composants de manière stable et efficace, en particulier face au mécanisme anti-crawling du site web cible.
Pourquoi les adresses IP de proxy sont-elles l'élément vital d'un système de crawler ?
Quelle que soit la perfection de la logique de votre crawler, si elle échoue fréquemment à cause du blocage de l'IP, tout n'est que paroles en l'air. L'IP proxy joue ici le rôle de "cape d'invisibilité" : elle fait passer votre requête par un serveur intermédiaire, cachant ainsi l'adresse IP réelle du crawler.
Pour les systèmes qui combinent Selenium et Scrapy, les exigences en matière d'IP de proxy sont plus complexes :
- Côté ferrailleLes services mandataires à haute simultanéité et à faible latence sont nécessaires pour répondre à leurs requêtes rapides et asynchrones.
- Côté séléniumLa stabilité et l'anonymat du proxy doivent être plus élevés en raison des frais généraux élevés liés au lancement du navigateur lui-même, et une adresse IP devrait idéalement être en mesure de supporter un fonctionnement continu pendant une période plus longue.
En utilisant directement des proxys gratuits ou de mauvaise qualité, vous rencontrerez souvent des problèmes tels qu'une défaillance rapide de l'IP, une vitesse lente et un manque d'anonymat, ce qui entraînera des interruptions fréquentes du système de crawler et des coûts de maintenance extrêmement élevés.
Intégrer ipipgo Proxy IP pour Scrapy
La façon la plus courante d'intégrer des IP proxy pour Scrapy est d'ajouter un proxy à l'élémentDOWNLOADER_MIDDLEWARESPersonnalisation d'un middleware de téléchargement dans l'application Ce qui suit est un exemple intégré deipipgo Proxy résidentiel dynamiqueavec des ressources IP provenant d'un véritable réseau domestique, fortement anonymisées et bien adaptées aux scénarios d'exploration.
Dans le fichiersettings.pyConfigurez les adresses de l'intergiciel et de l'API du proxy dans le fichier
settings.py
Activer le middleware personnalisé de l'agent
DOWNLOADER_MIDDLEWARES = {
'votre_nom_de_projet.middlewares.IPIPGoProxyMiddleware' : 543,
}
Adresse API du service proxy ipipgo (à remplacer par les informations de votre commande)
IPIPGO_PROXY_URL = "http://your-username:your-password@gateway.ipipgo.com:port"
Ensuite, créez le fichier middlewaremiddlewares.pyqui met en œuvre la logique d'installation du proxy :
middlewares.py
import base64
from scrapy import signals
classe IPIPGoProxyMiddleware(objet).
def process_request(self, request, spider).
Récupère l'adresse du serveur proxy dans les paramètres
proxy_server = spider.settings.get('IPIPGO_PROXY_URL')
Définir les méta-informations de la requête pour permettre à Scrapy d'utiliser ce proxy
request.meta['proxy'] = proxy_server
Si votre service proxy nécessite une authentification de base, vous pouvez ajouter un en-tête d'authentification proxy (voir la documentation ipipgo pour le format exact)
proxy_user_pass = "votre-nom-d'utilisateur:votre-mot-de-passe"
encoded_user_pass = base64.b64encode(proxy_user_pass.encode()).decode()
request.headers['Proxy-Authorisation'] = f'Basic {encoded_user_pass}'
De cette manière, chaque requête faite par Scrapy est automatiquement transmise par le pool d'IP proxy d'ipipgo, ce qui réduit considérablement le risque de blocage d'IP.
Configuration du proxy ipipgo pour les navigateurs Selenium
La configuration des proxys pour les navigateurs alimentés par Selenium, tels que Chrome, est légèrement plus compliquée et doit être définie via les options lors du lancement du navigateur. Voici un exemple d'intégration de Chromeipipgo static residential proxy. Les IP statiques sont extrêmement stables et conviennent aux tâches pour lesquelles Selenium doit maintenir des sessions pendant de longues périodes.
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
Configurer les options de Chrome
chrome_options = Options()
chrome_options.add_argument('--disable-blink-features=AutomationControlled') cache les fonctionnalités d'automatisation
Configurer un serveur proxy (en utilisant un proxy HTTP comme exemple, veuillez remplacer par les informations réelles fournies par ipipgo)
proxy_server = "http://your-username:your-password@gateway.ipipgo.com:port"
chrome_options.add_argument(f'--proxy-server={proxy_server}')
Si l'authentification est nécessaire, une autre solution est d'utiliser un plugin (qui est plus stable), voici un bref exemple de socks5 sans authentification :
from selenium.webdriver.common.proxy import Proxy, ProxyType
my_proxy = Proxy()
my_proxy.proxy_type = ProxyType.MANUAL
my_proxy.socks_proxy = "gateway.ipipgo.com:port"
my_proxy.socks_version = 5
capabilities = webdriver.DesiredCapabilities.CHROME
mon_proxy.add_to_capabilities(capabilities)
driver = webdriver.Chrome(desired_capabilities=capabilities, options=chrome_options)
Démarrer le navigateur avec le proxy
driver = webdriver.Chrome(options=chrome_options)
try : driver.get("")
driver.get("https://httpbin.org/ip")
Affichez l'adresse IP actuelle pour vérifier que le proxy est bien en place.
print(driver.page_source)
finally : driver.quit()
driver.quit()
Notes importantesDans les projets réels, il est recommandé d'encapsuler les instances de navigateurs et les configurations de proxy dans une "usine à navigateurs" réutilisable pour faciliter la gestion et la récupération des ressources.
Construire un module de gestion unifiée de l'IP proxy
Afin de rendre l'ensemble du système de crawler plus robuste, il est conseillé de créer un module unifié de gestion des IP proxy. Les principales responsabilités de ce module sont les suivantes
- Gestion des pools d'adresses IPLes services d'information sur les réseaux et les services de communication sont les suivants : obtenir la liste des adresses IP à partir de l'API ipipgo et vérifier régulièrement la disponibilité et la latence des adresses IP.
- équilibrage de la chargeLes deux logiciels de gestion de l'interface utilisateur ont été conçus de manière à ce que les IP des proxy les plus appropriés soient assignés intelligemment en fonction des besoins différents de Scrapy et de Selenium.
- Absence de réessai et de commutationLorsqu'une requête échoue à cause d'une IP proxy, marquer automatiquement l'IP et passer à la prochaine IP disponible.
Une idée simplifiée de la gestion des pools d'adresses IP est présentée dans le tableau suivant :
| assemblages | Paquets recommandés par l'ipipgo | Points de configuration |
|---|---|---|
| Téléchargeur Scrapy | Agents résidentiels dynamiques (standard) | Concurrence élevée, rotation des adresses IP à la demande, priorité à la réactivité |
| Navigateur Selenium | Agent résidentiel statique (entreprise) | Stabilité des sessions de longue durée, anonymat élevé, emplacement géographique spécifié |
Vous pouvez développer une API simple que l'intergiciel Scrapy et la fabrique de navigateurs Selenium appellent pour obtenir les adresses de proxy actuellement disponibles.
Foire aux questions et solutions (AQ)
Q1 : Que dois-je faire si j'obtiens beaucoup d'erreurs de connexion au proxy dans les logs de Scrapy ?
A1 :C'est généralement le signe que l'adresse IP du proxy est instable ou qu'elle a échoué. Vérifiez que le solde de votre compte ipipgo et les paquets fonctionnent. Ajoutez une logique de réessai d'erreur et de changement d'IP à votre logiciel intermédiaire de proxy. Lorsqu'une exception de dépassement du délai de connexion ou de refus de connexion est détectée, le proxy actuel doit être automatiquement supprimé du pool d'IP et la requête doit être relancée avec une nouvelle IP.
Q2 : Je ne peux accéder à aucune page web après le lancement du navigateur Selenium, comment résoudre le problème ?
A2 :Il s'agit d'un problème typique de configuration de proxy. Suivez les étapes suivantes pour résoudre le problème : 1) Assurez-vous que l'adresse du proxy, le port, le nom d'utilisateur et le mot de passe sont corrects ; 2) Essayez d'abord de ne pas utiliser le proxy dans le code pour vous assurer que le navigateur lui-même et le réseau sont normaux ; 3) Si vous utilisez un proxy d'authentification, assurez-vous que la méthode d'authentification est correcte (par exemple, authentification de base ou méthode plug-in dans le code ci-dessus) ; 4) Contactez l'assistance technique d'ipipgo pour confirmer l'état du serveur proxy.
Q3 : Comment puis-je mettre en place des règles de proxy indépendantes pour des sites web spécifiques (par exemple, des sites web qui nécessitent une connexion) ?
A3 :Des règles de proxy basées sur le domaine peuvent être mises en œuvre dans votre module de gestion de proxy. Par exemple, l'attribution à un site web important et strictement anti-crawl d'un proxy séparé de haute qualité.ipipgo static residential ipet juge dans l'intergicielrequest.urlet s'il correspond, cette IP exclusive est utilisée, tandis que les autres demandes utilisent le pool d'IP dynamiques. Cela permet d'assurer une stabilité essentielle à la mission de l'entreprise.
résumés
Combiner Selenium et Scrapy avec l'applicationipipgoGrâce au service d'IP proxy stable et fiable fourni, vous pouvez construire un système de crawler puissant qui peut faire face à un rendu frontal complexe et à un crawling de données à grande vitesse en même temps. La clé réside dans le choix du type d'IP proxy approprié (dynamique ou statique) en fonction des différentes caractéristiques de Scrapy et Selenium, et dans la conception d'un module de gestion de proxy intelligent pour unifier la programmation. Cela permet non seulement de contourner efficacement le mécanisme anti-crawling, mais aussi de garantir que l'ensemble du système fonctionne à long terme, de manière stable et efficace.

