Comment les crawlers Python peuvent-ils éviter d'être bloqués ? Idées de base pour la construction d'un pool de proxy
Lorsque votre crawler visite continuellement le site web cible, le serveur identifie le trafic anormal en fonction de la fréquence des requêtes, de l'adresse IP et d'autres caractéristiques. De nombreux débutants seront perplexes :Pourquoi est-il toujours bloqué alors que l'en-tête de requête aléatoire est clairement défini ?En fait, le problème central est queConcentration excessive des trajectoires d'accès à partir d'une seule adresse IP.
En créant un pool d'IP proxy, il est possible d'utiliser une IP de sortie différente pour chaque demande. Voici une astuce clé :Proxy IP résidentiel dynamiquePlus difficile à identifier que l'IP des centres de données. Par exemple, en utilisant les ressources IP résidentielles fournies par ipipgo, les segments IP proviennent de véritables foyers à large bande et présentent naturellement un degré d'anonymat plus élevé.
Trois minutes pour construire un proxy pool de base (avec du code Python)
L'essence du regroupement de serveurs mandataires est de maintenir une liste d'adresses IP disponibles et d'en vérifier la validité en temps réel. L'implémentation la plus simple est démontrée ici :
"`python
demandes d'importation
from concurrent.futures import ThreadPoolExecutor
classe ProxyPool.
def __init__(self).
self.api_url = "https://api.ipipgo.com/getip" ip ipgo obtient l'adresse API de l'IP
self.valid_ips = []
def fetch_ips(self).
resp = requests.get(self.api_url, params={'type' : 'http'})
new_ips = [f"{ip}:{port}" for ip,port in resp.json()['data']]]
avec ThreadPoolExecutor(10) comme ex.
ex.map(self.validate_ip, new_ips)
def validate_ip(self, ip).
essayer.
resp = requests.get('http://httpbin.org/ip',
proxies={'http' : f'http://{ip}'},
timeout=5)
if resp.json()['origin'] in ip.
self.valid_ips.append(ip)
sauf.
passer
“`
Vérifier par lots la disponibilité des IP par le biais du pool de threads, il est recommandé de configurer une tâche programmée pour mettre à jour le pool d'IP toutes les heures. Notez que la sélection de la prise en charge deAPI à haute concordancele temps de réponse de l'API d'ipipgo est inférieur à 200 ms, ce qui convient à l'acquisition de données à haute fréquence.
Détails de la configuration de l'anti-blocage IP de Scrapy, qui bascule automatiquement
Commutation intelligente d'agents par le biais d'un logiciel intermédiaire dans le cadre de Scrapy :
"`python
classe CustomProxyMiddleware.
def __init__(self, proxy_pool).
self.proxy_pool = proxy_pool
@classmethod
def from_crawler(cls, crawler).
return cls(crawler.settings.get('PROXY_POOL'))
def process_request(self, request, spider).
si 'proxy' n'est pas dans request.meta :
proxy = self.proxy_pool.get_random_ip()
request.meta['proxy'] = f'http://{proxy}'
def process_response(self, request, response, spider).
si response.status est dans [403, 429] :
self.proxy_pool.mark_bad(request.meta['proxy'])
demande de retour
retour de la réponse
“`
Il y a ici deux points essentiels :
- Injection automatique de proxies valides avant les requêtes
- Élimine automatiquement les adresses IP non valides en cas de code d'état bloquant.
Suggéré pour aller avec ipipgo'sfonction de maintien de la sessionLorsqu'il est nécessaire de conserver la même adresse IP (par exemple pour le statut de connexion), leur service de proxy à long terme peut être utilisé.
Utilisation de l'IP proxy FAQ QA
Q : Que dois-je faire si la connexion au proxy IP est interrompue ?
R : Vérifiez si le protocole du proxy correspond (HTTP/HTTPS/SOCKS5), ipipgo prend en charge l'adaptation automatique à tous les protocoles, il n'est pas nécessaire de le configurer séparément.
Q : Comment puis-je éviter de réutiliser les IP dans le pool de proxy ?
A : Recommandéalgorithme de sondage par poidsSi vous souhaitez limiter le nombre d'utilisations de chaque IP, l'API d'ipipgo permet de renvoyer les nouvelles IP inutilisées.
Q : Pourquoi recommandez-vous d'utiliser le service proxy d'ipipgo ?
R : Leur IP résidentielle couvre plus de 240 pays et régions dans le monde, plus de 90 millions de ressources IP résidentielles réelles, prend en charge plusieurs modes dynamiques/statiques et est particulièrement adaptée aux scénarios d'exploration qui requièrent un anonymat élevé.
Cinq conseils pour éviter les pièges dans le monde réel
phénomène problématique | prescription |
---|---|
Je viens d'obtenir une IP et elle ne fonctionne pas. | Sélectionner le supportVérifier avant d'utiliserfournisseur de services, ipipgo offre une interface de détection de survie en temps réel |
La vitesse de l'agent affecte l'efficacité de l'exploration | préférernœud dorsal localipipgo a déployé de nombreux points d'accès à haut débit dans le pays. |
Les sites cibles sont géographiquement limités | L'utilisation de l'outilPréciser la ville/l'opérateurFonction d'acquisition IP |
Nécessité de simuler un accès mobile | Utilisation avec le service proxy mobile 4G d'ipipgo |
Enfin, il est recommandé d'établir des intervalles de requête raisonnables, d'utiliser la rotation des User-Agent et de se conformer à l'accord sur les robots du site web. Grâce aux méthodes ci-dessus, le test réel peut être un cycle de survie du crawler de quelques heures à plusieurs semaines.