
Un crawler en Python pour se protéger des interdictions
Le vieux fer à repasser engagé dans les crawlers a dû rencontrer cet obstacle - le site cible vous donne soudain une interdiction d'IP. La semaine dernière, j'ai aidé un ami à extraire les données d'une société de commerce électronique, il vient de courir une demi-heure sur la récolte de 502 paquets cadeaux, tellement en colère qu'il a failli fracasser le clavier. Cette fois-ci, nous devons nous éloigner de notre sauveur :La grande rotation des IP par procuration.
Comment une IP proxy peut-elle être un garde du corps pour les crawlers ?
En d'autres termes, il fait croire au site web que la visite provient d'un autre ordinateur. C'est comme si vous jouiez à la poule mouillée avec un changeur de voix, de sorte que votre adversaire ne puisse pas savoir où vous vous trouvez réellement. Voici un point essentiel :Ne pas utiliser d'agents libres.!去年实测过某免费代理池,20个IP里能用的就3个,高得能煮碗泡面。
| Type d'agent | taux de disponibilité | tempo | stabilité |
|---|---|---|---|
| Agents libres | <15% | 3 000 ms et plus | Vous pouvez quitter la ligne à tout moment. |
| proxy commercial ipipgo | >99% | Dans les 200 ms | 7×24 heures stable |
Code pratique : au crawler portant une cape d'invisibilité
Voici une démo avec la bibliothèque requests, en se concentrant sur la section des paramètres du proxy. Notez le remplacement de your_api_key par la clé réelle que vous avez obtenue du backend ipipgo :
demandes d'importation
à partir d'un choix d'importation aléatoire
Pool de proxy de ipipgo
def get_proxies() :
api_url = "https://api.ipipgo.com/fetch?key=your_api_key"
resp = requests.get(api_url).json()
return [f "http://{ip}:{port}" for ip,port in resp['data']]
proxies_pool = get_proxies()
Méthode de requête avec changement automatique d'IP
def smart_request(url).
try.
proxy = {'http' : choice(proxies_pool)}
resp = requests.get(url, proxies=proxy, timeout=10)
return resp.text
except Exception as e.
print(f "planté : {e}, changez d'IP maintenant et réessayez")
return smart_request(url) auto-retry
Exemple : exploration d'une page de produit
data = smart_request("https://target-site.com/product/123")
Cette routine s'articule autour de trois points essentiels :
- Sélection aléatoire d'IP par demande - C'est une sorte de guérilla qui rend le site sans défense.
- Réessai automatique anormal - Lorsque la PI est invalidée, vous changez immédiatement d'armure.
- réglage du délai d'attente - Ne luttez pas contre les agents laggy.
Guide pour éviter le gouffre : 90% Les débutants marcheront sur la mienne
1. fréquence inappropriée de remplacement des PI :Ne changez pas d'IP comme pour la maladie de Parkinson, et n'utilisez pas une IP jusqu'à la mort. Il est recommandé d'ajuster en fonction de la force de l'anti-escalade du site, en général 5 à 10 minutes pour changer une vague.
2. les informations d'en-tête ne sont pas dissimulées :Il ne suffit pas de changer votre IP, n'oubliez pas d'apporter un User-Agent aléatoire, c'est comme changer de vêtements mais pas de chaussures, vous serez toujours exposé.
headers_pool = [
{"User-Agent" : "Mozilla/5.0 (Windows NT 10.0) AppleWebKit/537.36"},
{"User-Agent" : "Mozilla/5.0 (iPhone ; CPU iPhone OS 16_6 like Mac OS X)"}
]
3. l'accord d'agence s'est trompé :Les proxys http et https doivent être séparés, comme si l'on utilisait de la lessive pour le visage en guise de dentifrice. Si vous utilisez ipipgo, notez que leur proxy prend en charge les deux protocoles, ce qui est un grand soulagement.
Foire aux questions QA
Q:Que dois-je faire si toutes les IP proxy se bloquent soudainement ?
R : Vérifiez d'abord le solde de votre compte, puis assurez-vous que l'adresse API est correcte. Si vous utilisez ipipgo, ils ont une interface de sauvegarde https://backup.ipipgo.com qui peut vous sauver la vie dans les moments critiques.
Q : Comment savoir si un agent est vraiment efficace ?
R : Ajoutez un lien de vérification dans le code, par exemple, visitez http://ip.ipipgo.com/checkip, peut renvoyer le proxy IP actuel signifie la voie d'accès.
Q : Comment gérer les agents pour les crawlers multithreads ?
R : Il est recommandé d'utiliser le mécanisme de file d'attente, chaque thread de la file d'attente prenant l'adresse IP, utilisée et remise en place. L'API d'ipipgo prend en charge l'acquisition par lots, une fois pour prendre 200 adresses IP, il suffit d'ouvrir 20 threads pour les construire.
Pourquoi ipipgo ?
Celui-ci présente trois caractéristiques qui m'ont incité à prendre la route :
- Véritable réserve exclusive d'adresses IP - Contrairement à certains marchands qui affirment qu'il s'agit d'une exclusivité, il s'agit en fait d'une propriété intellectuelle d'occasion.
- Positionnement au niveau de la ville - Lorsque des données régionales sont nécessaires, il est possible d'obtenir avec précision l'IP d'un lieu donné.
- Le trafic n'est pas gaspillé - Il ne s'agit pas d'un abonnement mensuel qui fait mal lorsqu'il n'y en a plus.
Enfin, je voudrais dire quelques mots sur les crawlers. Utilisez ipipgo et d'autres services proxy réguliers, fixez une fréquence de requête raisonnable, ne faites pas planter les sites web des autres. La technologie est une arme à double tranchant, qu'il faut utiliser à bon escient pour durer.

