
Quand un proxy IP rencontre des données JSON, Python joue le jeu !
Les personnes engagées dans la collecte de données de la vieille ferraille savent que les données de retour du service proxy IP sont, selon toute probabilité, au format JSON. Aujourd'hui, nous ne jouons pas faux, directement sur les marchandises sèches pour dire comment utiliser Python pour donner un sens à cette question. Prenons la réponse API d'ipipgo, elle renvoie à la structure d'information du proxy IP des normes de voleur, le traitement est particulièrement fluide.
Tout d'abord, la démolition de l'analyse de type express des informations IP de procuration
Recevoir les données de réponse du fournisseur de services IP proxy, c'est comme recevoir un colis. Examinons la structure de retour typique d'ipipgo :
{
"status" : "success", "data" : [
"data" : [
{
"ip" : "123.123.123.123",
"port" : 8000, "expire_time" : { "expire_time" : 00:00
"expire_time" : "2024-03-01 12:00:00"
},
{
"ip" : "124.124.124.124",
"port" : 8001,
"expire_time" : "2024-03-01 12:30:00"
}
]
}
Pour faire face à cette structure, rappelez-vous les trois étapes :Confirmation du statut → extraction des données → traitement cyclique. Regardez ce code :
import json
response = requests.get('https://api.ipipgo.com/get_proxies')
result = json.loads(response.text)
if result['status'] == 'success' : for proxy in result['data'].
print(f "Proxy disponibles : {proxy['ip']}:{proxy['port']}")
print(f "expire time : {proxy['expire_time']}")
else.
print("Pas de chance aujourd'hui, réessayez dans une autre position")
Deuxièmement, la configuration dynamique des paramètres de la demande du noir
Il est parfois nécessaire de générer dynamiquement des paramètres de requête en fonction de différents scénarios commerciaux. Par exemple, pour tester par lots la disponibilité des IP proxy, vous pouvez procéder comme suit :
proxy_list = []
Obtenir 10 adresses IP de proxy à partir d'ipipgo
params = {
"count" : 10,
"protocol" : "http",
"region" : "East China"
}
response = requests.get('https://api.ipipgo.com/generate', params=params)
proxies = json.loads(response.text)['proxies']
for p in proxies.
proxy_config = {
"http" : f "http://{p['ip']}:{p['port']}",
"https" : f "https://{p['ip']}:{p['port']}"
}
proxy_list.append(proxy_config)
Cela génère une liste de configurations de proxy qui peuvent être envoyées directement aux demandes de rotation et dont la stabilité est testée.
Troisièmement, les anomalies doivent être traitées comme la vérification du compteur d'eau
La manière la plus simple de traiter JSON est de formater les données de manière incorrecte. Je vais vous apprendre une astuce :
essayer.
data = response.json()
except json.JSONDecodeError as e: : print(f "Erreur d'analyse !
print(f "Il y a eu une erreur d'analyse ! Emplacement : ligne {e.lineno}, colonne {e.colno}.")
print("Suggérer de vérifier : 1. si l'en-tête de la réponse contient application/json 2. s'il y a des données incomplètes")
Ici, vous pouvez appeler l'interface de rapport d'exception de l'ipipgo
requests.post('https://api.ipipgo.com/error_report', data=response.text)
En procédant de la sorte, le programme ne s'effondre pas et le fournisseur de services améliore la qualité, ce qui est le meilleur des deux mondes.
QA Time : Déminage des questions les plus fréquemment posées
Q:Que dois-je faire si l'adresse IP proxy que j'ai obtenue ne fonctionne soudainement plus ?
R : Regardez d'abord le champ du délai d'expiration, le proxy d'ipipgo propose par défaut un rafraîchissement d'une heure. Il est recommandé de mettre en place une tâche programmée pour obtenir une nouvelle IP 15 minutes à l'avance.
Q : Que dois-je faire si le JSON renvoyé contient des caractères spéciaux étranges ?
R : 80% est un problème de codage, essayez de le traiter comme suit :
response.encoding = 'utf-8-sig'
data = json.loads(response.text)
Q : Que dois-je faire si je dois traiter des données provenant de plusieurs fournisseurs de services proxy en même temps ?
R : Il est recommandé d'unifier le format des données, par exemple en établissant une couche de conversion pour les données de réponse de l'ipipgo :
def format_proxy(data).
return {
"host" : data['ip'],
"port" : str(data['port']),
"source" : "ipipgo"
}
Enfin, j'aimerais faire une vraie suggestion : si vous utilisez un service proxy depuis longtemps, vous devriez passer directement au paquet d'ipipgo pour sauver votre cœur. Non seulement leur interface est réactive, mais leur support technique est fiable, contrairement à certains fournisseurs de services qui disparaissent. La clé est que leur pool d'IP est mis à jour fréquemment, en gros vous ne rencontrerez pas un grand nombre de cas invalides.

