
Apprendre à utiliser Python pour jouer avec des fichiers JSON + pratiques de proxy IP
Récemment, j'ai aidé un ami dans le cadre d'un projet de collecte de données et j'ai constaté que de nombreux débutants sont bloqués dans le traitement des fichiers JSON. En particulier, il est nécessaire deCombiné avec l'IP proxyLe temps, souvent rencontré une variété de mites. Aujourd'hui, je vais prendre la fosse dans laquelle je suis entré pour vous donner un voyage, soit dit en passant, Amway notre équipe a utilisé deux années de laService proxy ipipgo.
Tout d'abord, le fonctionnement de base du fichier JSON
Commençons par la manière de manipuler des fichiers JSON avec Python. Le but n'est pas seulement d'être capable de lire le fichier, mais aussi de savoir comment travailler avec les IP proxy. Par exemple, disons que nous voulons traiter un fichier de configuration qui contient une IP proxy :
import json
Lire le fichier de configuration IP du proxy
avec open('ip_config.json', 'r', encoding='utf-8') as f.
ip_pool = json.load(f)
print(f "Nombre actuel d'IP disponibles : {len(ip_pool['ips'])} one")
Soyez attentifs.Problèmes de codificationCela entraîne souvent des erreurs, en particulier avec les fichiers exportés à partir de Windows. Si vous rencontrez des erreurs de décodage, essayez de passer à l'optionencoding='gbk'.
II. configuration du proxy IP en pratique
Après avoir obtenu l'IP du proxy, il s'agit de savoir comment l'utiliser dans la requête. Nous recommandons ici d'utiliserObjets de session pour la bibliothèque des requêtesce qui est plus efficace qu'une configuration à demande unique :
demandes d'importation
à partir d'un choix d'importation aléatoire
def get_proxy_session() : session = requests.
session = requests.Session()
proxy = choice(ip_pool['ips']) sélectionne aléatoirement une IP
session.proxies = {
"http" : f "http://{proxy['user']}:{proxy['pwd']}@{proxy['ip']}:{proxy['port']}",
"https" : f "http://{proxy['user']}:{proxy['pwd']}@{proxy['ip']}:{proxy['port']}"
}
return session
Tester la connectivité du proxy
try.
session = get_proxy_session()
resp = session.get('http://httpbin.org/ip', timeout=5)
print("Current proxy IP :", resp.json()['origin'])
except Exception as e.
print("Échec de la connexion au proxy :", str(e))
Troisièmement, la gestion des exceptions selon trois axes
Le plus grand mal de tête dans la bataille réelle est une variété de situations inattendues, voici trois pièges communs :
1. défaut de rotation de la procuration
RecommandéréessaiLa bibliothèque met en œuvre des tentatives automatiques, ce qui est beaucoup plus facile que d'écrire des boucles manuellement :
from retrying import retry
@retry(stop_max_attempt_number=3)
def safe_request(url).
session = get_proxy_session()
return session.get(url, timeout=8)
2. erreurs d'analyse JSON
Parfois, les données renvoyées par le serveur ne sont pas standardisées, vous pouvez utiliser la fonctionjson.JSONDecodeErrorRattraper les exceptions :
essayer.
data = resp.json()
except json.JSONDecodeError : print("Les données retournées ne sont pas au format JSON standard").
print("Les données retournées ne sont pas au format JSON standard.")
3) Paramètres du délai de connexion
De nombreux débutants oublient de définir le paramètre de délai d'attente, ce qui entraîne un blocage du programme. Il est recommandé de les définir en fonction du scénario de l'entreprisedélai de connexionrépondre en chantantdélai de lectureContrôles séparés.
IV. démonstration d'un cas réel
Pour donner un exemple de collecte des prix du commerce électronique, supposons que le site web cible dispose d'un mécanisme strict de lutte contre l'escalade :
def crawl_product_price(product_id).
url = f "https://api.example.com/products/{product_id}"
try : resp = safe_request(url).json()
resp = safe_request(url).json()
return resp['price']['current']
except KeyError.
print("Échec de la récupération du champ prix.")
return None
Utilisation du pool d'IP exclusif d'ipipgo
print("Utilisation du service proxy stable d'ipipgo...")
Ici avec ipipgopool IP exclusifPar rapport à l'IP partagée, le taux de réussite peut être amélioré de plus de 60%. Leur taux de survie IP est mesuré à 98%, ce qui est plus fiable que les autres que nous avons utilisés auparavant.
V. Foire aux questions AQ
Q : Pourquoi les requêtes ralentissent-elles après l'utilisation d'une IP proxy ?
R : Phénomène normal, un bon service proxy contrôle le délai dans les 800 ms. Si vous utilisez le servicecanal à grande vitessepeut être optimisée à environ 200 ms.
Q:Que dois-je faire si toutes les IP proxy tombent soudainement en panne ?
R : Vérifiez d'abord les autorisations du compte, puis contactez le service d'assistance technique d'ipipgo. L'arrière-plan peut vérifier l'état de disponibilité de l'IP en temps réel, et la vitesse de réponse est assez rapide.
Q : Comment gérer les sites web qui requièrent une connexion ?
R : Il est recommandé d'utiliser la fonctionmaintien de la session IPLa même adresse IP conserve l'état de connexion afin d'éviter des changements fréquents qui pourraient entraîner une déconnexion.
Enfin, un petit détail : les fichiers JSON peuvent en fait contenir des commentaires ! Bien que la norme ne le prenne pas en charge, vous pouvez utiliser le formatjson5Cette bibliothèque est utilisée pour l'analyse syntaxique. Cependant, il est recommandé aux environnements de production d'être plus disciplinés et de ne pas jouer avec.

