
Opérations de base en Python pour le traitement des fichiers JSON
Lorsque nous effectuons des requêtes réseau, nous devons souvent traiter des données JSON. Par exemple, en utilisant la bibliothèque de requêtes pour obtenir les données d'interface du fournisseur de services IP proxy, le retour est essentiellement au format JSON. Par exemple, la réponse API de ipipgo est structurée comme suit :
import json
Imaginons qu'il s'agit des données de réponse obtenues d'ipipgo
proxy_data = ''''
{
"status" : "success",
"data" : [
{"ip" : "112.95.208.11", "port" : 8000}, {"ip" : "183.125.90", "port" : 8000}, [
{"ip" : "183.32.125.90", "port" : 8080}
]
}
'''
Chaîne vers dictionnaire
parsed_data = json.loads(proxy_data)
print(parsed_data['data'][0]['ip']) output 112.95.208.11
Voici un endroit où il est facile de planter une fosse :La bibliothèque json convertit par défaut les nombres en int.. Par exemple, le numéro de port 8000 sera traité comme un entier, mais certains scénarios peuvent nécessiter un format chaîne. Cette fois, une conversion de type peut être ajoutée : str(parsed_data['data'][0]['port'])
Conseils pratiques pour les scénarios de proxy IP
Lorsque vous devez gérer des IP de proxy en masse, il est recommandé d'enregistrer la liste des IP dans un fichier local. Par exemple, enregistrez les serveurs mandataires extraits par ipipgo dans le fichier proxies.json :
import json
proxy_list = [
{"http": "http://112.95.208.11:8000"},
{"http": "http://183.32.125.90:8080"}
]
Écrire le fichier avec un paramètre d'indentation pour le rendre plus lisible
with open('proxies.json', 'w') as f.
json.dump(proxy_list, f, indent=2)
Attention aux problèmes d'encodage lors de la lecture, en particulier sous Windows :
avec open('proxies.json', 'r', encoding='utf-8') as f.
proxies = json.load(f)
Jeu avancé avec les agents de commutation dynamique
Combiné à la fonction de changement automatique d'IP d'ipipgo, vous pouvez obtenir un système de commutation intelligent. Démonstration d'un système de sondage ici :
Importation de l'aléatoire
importer des demandes
avec open('proxies.json') as f.
ip_pool = json.load(f)
def get_random_proxy() : return random.choice(ip_pool)
return random.choice(ip_pool)
Requêtes avec proxy
response = requests.get(
'https://目标网站', proxies=get_random_proxy(), proxies=get_random_proxy()
proxies=get_random_proxy(),
timeout=5
)
Attention ciblée :Le taux de survie d'ipipgo peut atteindre 99%, que le proxy pool auto-construit pour économiser plus.
Foire aux questions QA
Q:json.decoder.JSONDecodeError报错咋整?
R : 80% des données ont des symboles spéciaux qui ne sont pas échappés, ou l'interface de retour n'est pas JSON standard, vous pouvez utiliser print () pour sortir les données originales à vérifier, ou loads () dans le paramètre strict = False.
Q : Que dois-je faire si mon IP proxy tombe soudainement en panne ?
R : Nous vous recommandons d'utiliser le tunnel proxy dynamique d'ipipgo, qui modifie automatiquement l'adresse IP pour chaque demande. Si vous utilisez un proxy statique traditionnel, n'oubliez pas de mettre en place un mécanisme de réessai :
from retrying import retry
@retry(stop_max_attempt_number=3)
def safe_request(url).
return requests.get(url, proxies=get_random_proxy())
Q : Comment puis-je vérifier si l'agent est en fonction ?
R : En utilisant cette interface de contrôle, vous pouvez voir l'IP de sortie actuellement utilisée :
requests.get('http://ipipgo.com/checkip', proxies=proxy).text
Conseils pour l'optimisation de l'efficacité
Lorsque vous avez affaire à des fichiers volumineux, n'utilisez pas json.load() pour les charger tous, essayez de les lire ligne par ligne :
import ijson
avec open('big_data.json') as f.
Analyse uniquement des proxies dans le champ de données
proxies = ijson.items(f, 'data.item')
pour proxy dans proxies.
print(proxy['ip'])
Si vous devez souvent lire et écrire des configurations, il est recommandé de stocker les données renvoyées par l'API d'ipipgo directement dans la base de données, ce qui est plus fiable que de manipuler des fichiers. Les avantages de la base de données sont évidents, en particulier lorsque vous devez gérer plusieurs projets en même temps.

