Passer au contenu principal

Utiliser XPath relatif pour localiser des données en dehors d'un élément de boucle

Mis à jour il y a plus d'un an

Bien que cela soit assez rare, il arrive que nous ayons besoin d'obtenir des données en dehors d'un élément de boucle existant.

Supposons que nous voulions extraire des données de la page des meilleures ventes d'Amazon. Pour chaque produit, nous devons obtenir les détails du produit et la catégorie à laquelle il appartient en même temps, comme le montre l'image ci-dessous :

categoryandproduct.jpg

Si nous créons une boucle uniquement pour les produits, les données relatives à la "catégorie" se trouveront apparemment en dehors de la boucle "produit". Vous pouvez essayer de résoudre le problème en créant une autre boucle pour obtenir les données de la catégorie. Vous aurez beau essayer, cela ne se terminera pas bien... parce qu'Octoparse vous reprochera de chevaucher deux boucles. Mais si la nouvelle boucle est complètement indépendante de la boucle existante, nous ne parviendrons pas à établir des données entre les deux boucles.

Il semble que nous soyons coincés dans un dilemme. Que pouvons-nous faire ? La réponse est en fait très simple :

Utiliser le XPath de la boucle produit comme AXIS et écrire un XPath relatif pour localiser les données de la catégorie.

mceclip5.png

Au cas où vous seriez encore confus, permettez-moi de vous expliquer étape par étape avec le site web d'exemple : http://www.boribori.co.kr/index.html

Créer une boucle pour tous les produits

mceclip2.png

Vérifier le XPath pour les produits dans le code source HTML :

mceclip3.png

Le XPath pour les produits sera ://li[@class="a-carousel-card"]

En utilisant cet axe, nous pouvons obtenir les données relatives aux catégories en ajoutant la partie rouge ci-dessous : 

//li[@class="a-carousel-card"]/ancestor::div[@class="a-row a-carousel-controls a-carousel-row a-carousel-has-buttons"]/preceding-sibling::div[@class="a-row a-carousel-header-row a-size-large"]//h2

Comme nous avons défini la partie bleue comme XPath correspondant à l'élément de la boucle (qui est l'AXIS), le XPath pour le champ de données du produit doit être laissé vide, tandis que le XPath pour le champ de données de la catégorie doit être le même que celui de la partie rouge.

mceclip6.png

Les données de l'échantillon ressembleront à ceci :

mceclip7.png
Avez-vous trouvé la réponse à votre question ?