Aller au contenu

Attention à l'utilisation de "contains" dans tes requêtes XPath

Antoine Brisset
Antoine Brisset
Temps de lecture : 1 min
Attention à l'utilisation de "contains" dans tes requêtes XPath

Table des matières

Aujourd'hui, j'aimerais attirer ton attention sur un petit détail que tu dois garder en tête quand tu joues avec XPath.

Quand tu utilises la fonction contains,  pour vérifier par exemple si une balise contient une classe CSS spécifique, il y a de fortes chances que tu écrives ton expression de cette façon :

//*[contains(@class, "link")] 

Traduction : je cherche tous les éléments ayant une classe CSS appelée "link".

Le souci, c'est qu'en réalité, tu vas non seulement cibler les éléments contenant la classe "link" mais aussi – potentiellement – ceux contenant en partie la chaîne de caractères "link". Par exemple : "firstlink", "lastlink", "links", etc.

Si ton intention est de récupérer uniquement les éléments avec la classe "link", tu risques donc de viser trop large.

J'en ai moi-même fait l'expérience lors du développement d'Affiloop. J'utilisais des expressions XPath beaucoup trop "permissives", ce qui créait des effets de bord indésirables.

Mais en fouillant un peu sur le web, j'ai trouvé la solution.

La solution, c'est d'ajouter des espaces avant et après la classe qui t'intéresse, en utilisant la fonction concat.

Ce qui donne par exemple :

//*[contains(concat(" ", @class, " "), " link ")]

Traduction : je cherche tous les éléments ayant une classe CSS dont le nom, entouré d'espaces, correspond à " link ".

Et hop, plus aucun risque de cibler autre chose que la classe "link".

Voilà, j'espère que ça te sera utile pour tes opérations de scraping !

XPath

Antoine Brisset Twitter

Consultant SEO depuis 2010. Je traque les clics inutiles et j'automatise les tâches répétitives pour gagner du temps dans mon quotidien de travailleur du web.


Articles Similaires

Membres Public

Comment extraire un élément dont le nom commence par un signe de ponctuation avec XPath ?

La semaine dernière, alors que j'étais en train de développer un petit script Ruby pour des besoins de scraping, je suis resté bloqué quelques minutes sur un problème que je n'avais encore jamais rencontré. Il fallait que je récupére la valeur d'un attribut HTML

Comment extraire un élément dont le nom commence par un signe de ponctuation avec XPath ?
Membres Public

XPath : 4 raccourcis que tu utilises sans même le savoir

Cette semaine, je suis tombé sur une excellente présentation de Jonathan Moore au Brighton SEO à propos de XPath : The Xpath To Discovery. Des rappels sur les fondamentaux, des astuces, des cas d'usage avec Screaming Frog... je te conseille vraiment de la lire. En la parcourant, je me

XPath : 4 raccourcis que tu utilises sans même le savoir
Membres Public

Comment sauvegarder ses extractions personnalisées (XPath, regex) dans Screaming Frog ?

Le tips du jour fait suite à une question très intéressante que m'a posée Christophe aka @stonetatara au sujet de Screaming Frog. La question est la suivante : est-il possible d'enregistrer une collection de requêtes XPath dans une librairie permanente, de manière à pouvoir les réutiliser à

Comment sauvegarder ses extractions personnalisées (XPath, regex) dans Screaming Frog ?