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
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 ...