Guide de correspondance Xpath pour éviter les fosses

Cet article résume certains des pièges rencontrés quotidiennement par xpath. Afin d'éviter que tout le monde ne perde son temps au même endroit, ils sont annoncés. Veuillez déclarer la source pour la réimpression!

table des matières

1. Outil de requête de correspondance Xpath

Deuxièmement, l'existence de tbody dans le chemin fait que la correspondance est vide

Troisièmement, la correspondance des balises entrelacées

Quatre, sautez une certaine étiquette de numéro de série pour correspondre

Cinq, les étiquettes des éléments correspondants sont différentes et le nombre de correspondances est incohérent

Sixièmement, mettez à jour de temps en temps ...


1. Outil de requête de correspondance Xpath

Il existe un plug-in sur Chrome appelé "XPath Helper". Après l'avoir installé, appuyez sur "ctrl + shift + x" pour l'invoquer et le fermer. Il est très pratique à utiliser et pratique de déboguer si le chemin xpath est écrit correctement.

Deuxièmement, l'existence de tbody dans le chemin fait que la correspondance est vide

Quand il y a tbody dans le chemin correspondant, une liste vide sera mise en correspondance. La raison est que le navigateur a "optimisé" le xpath, et le xpath copié directement depuis le navigateur ne peut pas être mis en correspondance lors de l'exécution en python. Par exemple, il y a tbody dans le chemin dans les deux cas suivants :

XXX = XXXX.xpath("//div[@class='tabset']/table[2]/tbody")
XXX = XXXX.xpath("//div[@class='tabset']/table[2]/tbody/tr/td[2]/a/text()")

À ce stade, supprimez simplement le "tbody" dans le chemin.

Troisièmement, la correspondance des balises entrelacées

Pour les étiquettes entrelacées, il existe deux solutions. (1) Vous pouvez contourner cette balise et trouver d'autres balises ou attributs correspondants. (2) Les deux types peuvent être mis en correspondance séparément. Une fois que le type a est mis en correspondance, le type b est à nouveau mis en correspondance et ils peuvent être combinés ensemble.

Quatre, sautez une certaine étiquette de numéro de série pour correspondre

Par exemple, si vous souhaitez ignorer la première balise <tr>, vous pouvez utiliser position> 1.

XXX.xpath("//tr[position()>1]/td[1]/input/@value").extract()

Cinq, les étiquettes des éléments correspondants sont différentes et le nombre de correspondances est incohérent

Parfois, certains sites Web ajoutent "NOUVEAU", "SALE" et d'autres balises à certains articles, ce qui rend incohérent le nombre de balises correspondant aux articles du même tableau sur la page Web. Par exemple, la situation dans la figure suivante:

À ce stade, trouvez un moyen de contourner cette balise "span" supplémentaire.

XX.xpath("tr/td[2]/span/a/@href").extract()
# 绕过span标签
XXXX.xpath("tr/td[2]//a/@href").extract()

Sixièmement, mettez à jour de temps en temps ...

 

 

 


L'organisation n'est pas facile ...

Je suppose que tu aimes

Origine blog.csdn.net/Ryan_lee9410/article/details/107144213
conseillé
Classement