
Utilisation de Python pour jouer avec des données JSON provenant d'adresses IP proxy
Que les vieux briscards de la collecte de données fassent attention ! Aujourd'hui, utilisons Python pour traiter les données JSON renvoyées par l'interface IP du proxy. Ne regardez pas ce lien de haut, si vous ne le gérez pas bien, votre crawler sera paralysé sur place en quelques minutes. Prenons la réponse de l'API ipipgo comme exemple, pour vous apprendre à éviter ces pièges.
Opération de base : analyse JSON trois axes
Ne paniquez pas lorsque vous recevez une réponse de l'API, vérifiez d'abord qu'il ne s'agit pas d'un JSON correct.response.json()Avant la méthode, n'oubliez pas d'ajouter une exception :
demandes d'importation
try : resp = requests.get('')
resp = requests.get('https://api.ipipgo.com/getproxy')
data = resp.json()
except ValueError.
print("Merde ! L'interface ne renvoie pas un JSON correct.")
Concentrez-vous sur ces champs lorsque vous obtenez les données :
– liste_proxyListe des adresses IP
– heure_d'expiration: Horodatage de l'expiration
– régionAttribution de l'IP : attribution de l'IP
Conseils pour l'intégration de Proxy IP
Insérez l'adresse IP du proxy d'ipipgo dans les requêtes, ne vous contentez pas de copier le code de l'exemple ! Vous devez gérer le délai d'expiration de manière dynamique :
from datetime import datetime
def get_proxy().
Ici, nous appelons l'API ipipgo.
proxies = {
"http" : f "http://{new_ip}:{port}",
"https" : f "http://{new_ip}:{port}"
}
expire = datetime.fromtimestamp(data['expire_time'])
print(f "Cette IP dure jusqu'à {expire} et doit ensuite être changée")
return proxies
Guide anti-retour sur la gestion des exceptions
C'est ici que les IP proxy sont le plus susceptibles de se tromper :
| Type d'erreur | prescription |
|---|---|
| Erreur de connexion | Basculer immédiatement vers la nouvelle IP |
| Délai d'attente | Attendez 3 secondes avant de réessayer. |
| Code d'état 403 | Vérifier si l'en-tête de la requête comporte une authentification |
RecommandéréessaiLa bibliothèque effectue des tentatives intelligentes :
from retrying import retry
@retry(stop_max_attempt_number=3)
def safe_request(url).
return requests.get(url, proxies=get_proxy(), timeout=5)
Kit pratique de premiers secours pour l'AQ
Q:Que dois-je faire si toutes les IP proxy se bloquent soudainement ?
R : 80% de la concurrence est surutilisée, le paquet d'ipipgo a uneRenouvellement automatique de la piscineil suffit de l'activer dans la console
Q : Comment puis-je savoir si la période d'enquête est réellement en vigueur ?
A : envoyez une requête à l'interface de vérification d'ipipgo, l'IP et le port de retour ne correspondent pas, alors changez rapidement l'interface de vérification.
Q : Que se passe-t-il si je dois gérer plusieurs pools d'agents en même temps ?
A : Essayez ipipgo'sIsolation multicanauxFonctions, différents pools IP pour différents services afin d'éviter l'influence mutuelle
Optimisation minutieuse des performances
Vous l'avez trouvée ? De nombreux débutants commettent l'erreur d'appeler l'API pour récupérer l'IP pour chaque requête.cache local+rafraîchir à l'avance: :
importer le filage
classe ProxyPool.
def __init__(self).
self.lock = threading.
self.refresh() charge un lot au démarrage
def refresh(self).
avec self.lock.
Appeler l'interface ipipgo pour réapprovisionner les nouvelles IP.
self.pool = deque(data['proxy_list'])
def get_ip(self).
if len(self.pool) < 5 : rafraîchir plus tôt si le stock est faible
self.refresh()
return self.pool.pop()
Un dernier conseil : ipipgo'spaiement au volumeLes packs sont particulièrement adaptés aux tests de résistance, utilisez-en le plus possible, mais ne soyez pas stupide en achetant directement un abonnement mensuel. La prochaine fois que vous rencontrerez un problème d'analyse JSON, n'oubliez pas de vérifier que le premier en-tête de la réponse n'est pasapplication/jsonJe ne sais pas si c'est l'interface qui renvoie la page d'erreur HTML, mais si c'est l'interface qui renvoie la page d'erreur, je suis sûr que c'est l'interface.

