
Utilisation de Python pour désassembler les paquets JSON pour les IP proxy
Récemment, de nombreux amis qui collectent des données m'ont contacté pour se plaindre, disant que le format des informations IP renvoyées par de nombreux sites web devient de plus en plus complexe, en particulier lors de l'utilisation de services proxy IP, rencontrant souvent cinq ou six couches imbriquées de structure JSON. Aujourd'hui, nous prenons comme exemple le message de réponse de l'API ipipgo pour vous apprendre à utiliser Python afin d'extraire rapidement des informations clés.
Pourquoi JSON pour les IP proxy nécessite-t-il un traitement particulier ?
De nos jours, les fournisseurs de proxy (comme nous chez ipipgo) fournissent des paquets IP riches en informations :localisation géographiqueetopérateur (d'une centrale électrique, d'un réseau de transport, etc.)etDurée de conservationNonobstant ces domaines de base, il peut y avoirIndicateurs de vitesse de connexionetSoutien au protocoleDonnées imbriquées. Pour donner un exemple concret : la semaine dernière, un site de commerce électronique a comparé les prix pratiqués par des clients, parce qu'il n'avait pas traité les données relatives à la classification des villes dans le JSON, ce qui faisait que les agents de commutation sautaient toujours vers la mauvaise région.
| nom du champ | type de données | valeur de l'exemple |
|---|---|---|
| liste_proxy | réseau | [{ip:1.1.1.1, port:8080...}] |
| geo_info | objet | {country : "China",province : "Guangdong"...} |
| speed_test | objet | {connexion:120ms,transfert:1.8MB/s} |
Pratique : analyse de la réponse de l'API d'ipipgo
Supposons que nous recevions des données de réponse de l'ipipgo avec cette structure :
{
"code" : 200,
"data" : [
{
"ip" : "1.1.1.1",
"auth" : {
"username" : "ipipgo_demo",
"token" : "abcd1234"
},
"meta" : {
"location" : {
"city_code" : 755, "isp" : "telecoms
"isp" : "telecoms"
}
}
}
]
}
L'accent est mis sur trois domaines :
1. vérifier d'abord le code d'état de la réponseNe vous précipitez pas pour obtenir l'IP, vérifiez d'abord si le code est de 200.
2. l'imbrication des valeurs à plusieurs niveauxLa méthode .get() permet d'éviter les erreurs de type KeyError.
3. traitement des exceptionsJSON : les fluctuations du réseau peuvent rendre le JSON incomplet
Guide pour éviter la fosse : Questions fréquemment posées AQ
Q : Que dois-je faire si je rencontre une erreur JSONDecodeError ?
R : Quatre-vingt pour cent des problèmes de réseau ont conduit à ce que les données ne soient pas terminées, il est recommandé d'utiliser le logiciel ipipgo.Mécanisme de relectureConfiguration de 3 tentatives automatiques
Q : Comment puis-je extraire rapidement des codes de ville imbriqués ?
A : Essayez d'enchaîner les valeurs : item.get('meta',{}).get('location',{}).get('city_code ')
Q : Pourquoi recommandez-vous d'utiliser le service proxy d'ipipgo pour les JSON complexes ?
R : Le format de réponse de notre API est spécialement optimisé :
1. l'harmonisation des conventions de dénomination des champs
2. une définition claire des codes d'erreur
3. pas plus de trois niveaux d'emboîtement
4. fournir une documentation complète sur les réponses de l'échantillon
Modèles de code : scripts d'analyse prêts à l'emploi
import json
from retry import retry
@retry(tries=3, delay=2)
def parse_proxy_response(response).
data = json.loads(response).
data = json.loads(response)
if data['code'] ! = 200 : if data['code'] !
print(f "Code d'état d'exception : {data['code']}")
return []
return [{
'ip' : item['ip'], 'auth'.
'auth' : f "{item['auth']['username']}:{item['auth']['token']}",
'city' : item.get('meta',{}).get('location',{}).get('city_code')
} for item in data['data']]
except json.
JSONDecodeError : print("Response data incomplete, trying again...")
raise
except KeyError as e.
print(f "Champ obligatoire manquant : {e}")
return []
Ce modèle gère déjàTrois problèmes courantsLes fonctionnalités de l'application sont les suivantes : réessai du réseau, validation des données, levée des exceptions. Il est recommandé de l'associer à l'application ipipgoAPI de routage intelligentle nœud le plus rapide est automatiquement sélectionné.
Conseil de mise à niveau : Adaptation dynamique à différentes structures
Certains amis peuvent utiliser plus d'un fournisseur de service proxy en même temps (bien sûr, il est toujours recommandé de se concentrer sur l'utilisation d'ipipgo la), différents fournisseurs de la structure JSON peuvent être très différents. Nous allons vous apprendre une astuce d'analyse dynamique :
def smart_parser(item).
Essaie d'abord la structure standard d'ipipgo
si 'auth' dans item et 'meta' dans item.
return {item, 'source':'ipipgo'}
Adaptation aux structures d'autres fournisseurs
for key in ['proxy_ip', 'ipAddress'] : if key in item : return {item, 'source' : 'ipipgo'}
if key in item : return {'ip':item'].
return {'ip':item[key], 'source' : 'other'}
return None
Cette méthode donne la priorité à l'analyse du format standard d'ipipgo, et d'autres structures peuvent être gérées sous le capot. Cependant, pour une utilisation stable à long terme, il est recommandé d'utiliser directement notre méthodenorme structurelledu service API.

