
Utilisation de la fonction contains de XPath pour trouver des éléments web
Les confrères engagés dans la collecte de données savent que l'expression XPath est comme un projecteur, capable de localiser avec précision les éléments d'une page web. Cependant, de nombreux débutants sont toujoursTexte dynamiquesur la chute - comme le prix des marchandises affichées "¥ 199.00 ″ et "¥ 199 ″ le format de cette différence, cette fois vous devez sortir de contient () l'arme magique.
Pourquoi dois-je utiliser des adresses IP proxy avec XPath ?
Par exemple, vous écrivez une expression XPath parfaite : //div[contains(@class,'price')], et elle échoue soudainement après une douzaine de visites consécutives sur un certain site web. Il ne s'agit probablement pas d'un problème avec votre code, mais avec le site cibleBlocage de votre IP locale.! C'est là qu'un service proxy professionnel comme ipipgo est nécessaire pour changer automatiquement les IP résidentielles afin que la tâche de collecte ne soit pas interrompue.
| prendre | prescription |
|---|---|
| Accès haute fréquence à IP unique | ipipgo Pool d'IP à rotation dynamique |
| Besoin de localiser une classe dynamique | contains(class, 'fixed field') |
| Déclenchement du mécanisme anti-crawl | IP proxy + masquage de l'en-tête de la requête |
Contient des compétences pratiques en matière de fonction
Rappelez-vous ces trois combinaisons courantes :
- // tag [contains(text(), "keyword")] → recherche d'un tag contenant un texte spécifique
- //[contains(@attribute, 'fixed part')] → correspond aux éléments dont les valeurs d'attributs changent de manière dynamique
- combinaison contains+starts-with → gérer les noms de classe avec des suffixes aléatoires
Supposons que nous voulions capturer l'évaluation d'une plateforme de commerce électronique et que nous découvrions que le div de chaque bloc d'évaluation a un identifiant généré de manière aléatoire, mais que tous contiennent le préfixe "review-", qui peut être écrit à ce moment-là :
//div[contains(@id,'review-')]/p
Configuration du service proxy ipipgo
Configurez le proxy dans la bibliothèque requests de Python (n'oubliez pas de remplacer le mot de passe du compte dans l'exemple par vos propres informations d'identification obtenues auprès du backend ipipgo) :
proxies = {
'http' : 'http://用户名:密码@gateway.ipipgo.com:端口',
'https' : 'http://用户名:密码@gateway.ipipgo.com:端口'
}
response = requests.get(url, proxies=proxies, timeout=10)
En voici une.Guide pour éviter la fosseLes proxies gratuits de nombreux frères perdent beaucoup de temps à déboguer, ce qui réduit l'efficacité de la collecte. Le pool IP exclusif d'ipipgo prend en charge la recherche automatique, le test réel dans les 12 heures continues de la collecte des tâches, le taux de disponibilité IP est maintenu à 98% ou plus.
Foire aux questions QA
Q : Que dois-je faire si j'écris le bon XPath mais que je ne parviens pas à capturer les données ?
R : Vérifiez d'abord s'il déclenche l'anti-climbing, utilisez ipipgo pour changer d'IP et réessayez. Il est également recommandé d'ajouter contains(@class,'xxx') dans XPath pour effectuer un filtrage secondaire.
Q : Dois-je changer fréquemment l'adresse IP du proxy ?
R : Cela dépend de la force du contrôle des vents du site web cible. Il est recommandé d'activer le mode "Smart Switching" dans l'arrière-plan d'ipipgo, le système changera automatiquement d'adresse IP en fonction de l'état de la réponse.
Q : Comment vérifier l'efficacité de l'agent ?
R : Vous pouvez d'abord vous rendre sur le site http://httpbin.org/ip查看当前出口IP et comparer les adresses IP attribuées qui apparaissent dans la console ipipgo pour voir s'il s'agit des mêmes.
Jeu de mise à niveau : Mécanisme intelligent de tolérance aux pannes
Ajouter une double assurance dans le code : lorsque le contenu de la localisation échoue, il essaie automatiquement de localiser avec d'autres attributs, et en même temps de changer l'IP en temps réel à travers l'API d'ipipgo :
essayer.
element = find(//div[contains(@id, 'content')])
except : element = find(//div[contains(@class, 'main-text')])
element = find(//div[contains(@class, 'main-text')])
ipipgo.rotate_ip() appelle l'interface de changement d'IP
Enfin, pour ceux qui utilisent ipipgo, n'oubliez pas de l'activer en arrière-plan !"Mode XPath"Exclusivement optimisée pour les lignes, cette fonction est spécialement conçue pour les scénarios dans lesquels des éléments doivent être localisés, en contournant automatiquement les tactiques anti-crawling les plus courantes. Les nouveaux utilisateurs s'inscrivent pour recevoir une version d'essai du trafic 3G, suffisante pour passer en revue l'ensemble du processus de collecte.

