
Quel est le rôle de json.get() en Python ?
Les crawlers devraient avoir rencontré cette situation : à partir du fournisseur de services proxy pour obtenir une configuration IP au format json, les résultats de la mort ne peuvent pas extraire l'information clé. À ce moment-làjson.get()C'est votre planche de salut ! Prenons comme marronnier la réponse de l'interface proxy d'ipipgo :
import json
response = '{"proxy_list" : [{"ip" : "1.1.1.1", "port":8000},{"ip" : "2.2.2.2", "port":8080}], "status":200}'
data = json.loads(response)
L'extraction directe des données peut se faire par roulement
first_ip = data['proxy_list'][0]['ip'] En cas de données nulles, une erreur sera signalée.
La façon la plus sûre de procéder
first_ip = data.get('proxy_list', [{}])[0].get('ip', 'default IP')
Vous voyez ? Utiliser get(), c'est comme mettre un gilet pare-balles sur votre code, de sorte que vous ne vous planterez pas sur place même si vous rencontrez un champ manquant. L'interface changera un jour de structure, en particulier lorsqu'il s'agit de retours de tiers tels que des adresses IP de proxy.
Configuration de l'IP Proxy
Prenons par exemple la configuration du proxy d'ipipgo, le json renvoyé par leur interface ressemble à ceci :
{
"proxy" : {
"http": "socks5://user:pass@1.1.1.1:8888",
"https": "socks5://user:pass@1.1.1.1:8888"
},
"expire_time" : "2024-03-20 12:00:00"
}
C'est là qu'intervient la beauté de l'utilisation de get() :
expire = data.get('proxy', {}).get('expire_time', 'unknown time')
Double couche de protection ! Même si l'ensemble du champ proxy n'existe pas, l'erreur KeyError ne sera pas signalée. C'est une véritable bouée de sauvetage pour les robots d'exploration qui doivent fonctionner 24 heures sur 24 et 7 jours sur 7.
Des problèmes sur le terrain
1. Conversion de type pour la tranquillité d'espritLe numéro de port renvoyé par ipipgo peut parfois être de type chaîne de caractères, n'oubliez pas de le convertir !
port = int(data.get('port', '0')) empêche l'obtention de valeurs nulles
2. Ne pas confondre avec les dictionnaires imbriquésLorsque vous rencontrez plusieurs couches de configurations de proxy imbriquées, vous pouvez jouer avec l'imbrication.
auth = data.get('auth', {}).get('username', 'anonymous')
3. Valeurs par défaut pour le remue-méningesVous pouvez basculer automatiquement vers le proxy alternatif lors de la définition de l'IP par défaut.
current_ip = data.get('current_ip') ou ipipgo.get_backup_ip()
Temps consacré à l'assurance qualité (indispensable pour les débutants)
Q : Pourquoi ne pas prendre la valeur de la clé ?
R : De la même manière que vous vous rendez à l'armoire du service de messagerie pour retirer le colis, si vous saisissez directement le code de retrait (entre parenthèses), l'armoire risque d'être vide. Utiliser get() équivaut à appuyer d'abord sur le code d'enlèvement, s'il n'y a pas de colis, vous obtiendrez automatiquement un autre coursier (valeur par défaut).
Q : Que dois-je faire si l'IP proxy d'ipipgo ne parvient soudainement pas à se connecter ?
R : Il est recommandé d'utiliser get() avec la capture d'exceptions :
try.
ip = data['proxy']['http']
except KeyError : ip = ipipgo.get_new_ip()
ip = ipipgo.get_new_ip() Obtenir automatiquement une nouvelle adresse IP
Q : Avez-vous besoin de noms réels pour votre IP proxy ?
R : ipipgo adhère strictement aux lois sur la cybersécurité et tous les services de procuration sont tenus de remplir le formulaire de demande d'information.Authentification par le nom réel de l'entrepriseJe suis sûr que vous pourrez l'utiliser sans marcher sur des mines.
Tableau de comparaison des paramètres
| les méthodologies | avantage | inconvénients |
|---|---|---|
| données['clé'] | Direct et rapide | Se plante lorsqu'il rencontre une clé inexistante |
| data.get('key') | sûr et stable | Nécessité de gérer la logique des valeurs par défaut |
Un dernier conseil : lorsque vous utilisez le service proxy d'ipipgo, n'oubliez pas que les champs de retour de l'interface sont tous de typeminuscule (lettres)N'écrivez pas "Proxy" comme "proxy", Python est sensible à la casse ! Si vous rencontrez des problèmes, leur service technique à la clientèle barre de vitesse de réponse, personnellement test 10:00 pm peut également être un second retour à l'ordre de travail.

