[PYTHON] XPath Basics (2) - Comment écrire XPath

Dans l'article précédent, j'ai brièvement présenté le Concept de base de XPath. Cette fois, je vais vous présenter comment spécifier et acquérir des données à partir d'une page Web (HTML) à l'aide de XPath, c'est-à-dire comment écrire XPath.

1. Spécifiez par tag (élément)

Dans l'exemple HTML ci-dessous, vous pouvez voir que le texte est entouré de symboles tels que <> </ strong>, tels que </ html>. Des symboles tels que <> </ strong> sont appelés balises.

** <nom de la balise> Le contenu sera ici ... </ nom de la balise> **

La première balise est appelée "balise de début" et la balise de fin est appelée "balise de fin". Et l'ensemble de cette balise de début à la balise de fin s'appelle un élément.

La partie affichée en rouge dans le HTML ci-dessous est la balise. (Il s'affiche en bleu dans Firefox et en violet dans Chrome.) Harry Potter(html).jpg

Vous trouverez ci-dessous un résumé des balises que vous voyez souvent dans HTML. Pour plus d'informations, veuillez consulter cet article! 微信截图_20200515172336.png

** La manière la plus courante d'écrire XPath est d'écrire les balises séparées par une barre oblique «/». ** **

Par exemple, si vous voulez obtenir «Harry Potter» à partir de ce code HTML, vous pouvez spécifier «html tag-> body tag-> h1 tag» dans l'ordre à partir du haut de l'arborescence. Écrivez comme suit.

/html/body/h1

Vous pouvez également utiliser "//" pour omettre le chemin à mi-chemin.

//h1 mceclip1.png Vous pouvez spécifier la Nième balise si vous souhaitez faire correspondre plusieurs balises. Dans cet exemple, lorsque vous obtenez «7 631 yens», il s'agit de «span» sur la deuxième ligne de la ligne «div», alors écrivez comme suit.

//div/span[2]

En abstraction, la syntaxe XPath écrite en balises (éléments) ressemble à ceci:

** // Nom de la balise //タグ名/タグ名**

2. Spécifiez par attribut

Les attributs sont décrits à l'intérieur des balises et représentent les informations des balises en détail. En ajoutant des attributs aux balises, vous pouvez spécifier l'effet de l'élément et ajouter des instructions spécifiques. Les attributs sont généralement affichés sous la forme ** "id =" booksTitle "" **. Il est également possible de spécifier plusieurs attributs.

** <nom de la balise attribut name =" valeur de l'attribut "> **

Les attributs les plus courants sont href, title, style, src, id, class et ainsi de suite. Veuillez consulter cet article pour plus de détails!

** Dans XPath, les attributs sont représentés par des fonctions "@". ** **

Par exemple, si vous voulez obtenir «Harry Potter», écrivez XPath comme suit.

//h1[@id="booksTitle"] mceclip3 (1).png

En abstraction, la syntaxe XPath écrite dans les attributs ressemble à ceci:

** // Nom de la balise [@ nom de l'attribut =" valeur de l'attribut "] **

Si vous voulez obtenir tous les éléments avec les mêmes attributs, écrivez:

** // * [@ nom de l'attribut =" valeur de l'attribut "] **

3. Spécifiez dans le texte

Le texte est entouré de balises comme indiqué ci-dessous.

** <Nom de la balise> Le texte va ici ... </ Nom de la balise> **

La récupération de données à partir d'une page Web consiste généralement à récupérer le contenu ou le texte de la page. Vous pouvez donc spécifier directement le texte que vous souhaitez obtenir.

** Dans XPath, le texte est représenté par la fonction "text ()". ** **

Par exemple, si vous voulez obtenir "Harry Potter", spécifiez-le dans le texte et écrivez comme suit.

//h1[text()="Harry Potter"] mceclip4.png

En abstraction, la syntaxe XPath écrite dans les attributs ressemble à ceci:

** // Nom de la balise [text () =" Texte à récupérer "] **

Si vous voulez obtenir tous les éléments avec le même texte, écrivez:

** // * [text () =" texte à obtenir "] **

4. Spécifiez dans la relation de balise

Dans l'arborescence HTML, tous les éléments ont une relation parent-enfant / frère.

Les éléments qui contiennent un ou plusieurs éléments sont appelés éléments parents et ceux qui contiennent sont des éléments enfants. L'élément enfant n'a qu'un seul parent et se trouve entre les balises de début et de fin du parent. Les éléments avec le même parent sont appelés éléments frères.

Regardons également un exemple concret.

L'exemple ci-dessous est basé sur l'élément [body], où l'élément [body] est le parent des éléments [h1] et [div], et les éléments [h1] et [div] sont des enfants de l'élément [body]. Ceci est un exemple d'obtention d'éléments qui ont une relation parent-enfant / fratrie et de changement de style pour chacun.

Les éléments [h1] et [div] sont frères car ils ont le même élément parent [body].

De plus, puisque l'élément [div] est le parent des deux éléments [span], les deux éléments [span] sont les descendants de l'élément [body].

mceclip0 (1).png

Vous pouvez obtenir des éléments qui ont une relation parent-enfant ou frère avec l'élément actuel comme point de base. Par exemple, si vous voulez obtenir "7 631 yens", vous pouvez écrire comme suit en le spécifiant par rapport à la balise.

** Lorsque vous en faites un élément enfant de l'élément [div] **

//div/span[2]

** En en faisant un élément descendant de l'élément [body] **

//body//span[2]

** Lorsque vous en faites un élément frère de l'élément [span class = "author not Faded"] **

//span[@class="author notFaded"]/following-sibling::span[1]

** Lorsque vous en faites un élément frère de l'élément [span class = "tax_postage"] **

//span[@class="tax_postage"]/preceding-sibling::span[1]

Deux fonctions, "following-sibling ::" et "precedent-sibling ::", sont souvent utilisées pour spécifier des balises frères.

"Follow-sibling ::" est très utile pour spécifier des éléments de table. Par exemple, il existe l'exemple HTML suivant. 5.jpg

Lorsque ce code HTML est converti en page, il ressemblera au tableau suivant. 微信截图_20200515173912.png

Dans cet exemple, le nom de magasin "12345" est acquis. Cependant, il existe plusieurs éléments [td] et ** // td [1] ** ne peut pas être utilisé. De plus, si vous voulez obtenir des tables avec la même structure à partir de plusieurs pages à la fois, il est recommandé d'utiliser "following-sibling ::" avec la valeur fixe "store name" comme point de base. Écrivez comme suit.

** // th [text () =" nom du magasin "] / frère-suivant :: td [1] ** 图片1.png

En abstraction, la syntaxe XPath écrite dans les relations de balises ressemble à ceci: 微信截图_20200515174203.png Si la syntaxe ci-dessus correspond à plus d'une, vous pouvez spécifier la Nième balise en ajoutant ** [N] **.

Qu'est-ce que tu penses? Ce qui précède est la méthode d'écriture XPath la plus utilisée. Veuillez essayer. La prochaine fois, je présenterai les fonctions qui sont souvent utilisées pour XPath. impatient de!

Article original: https://helpcenter.octoparse.jp/hc/ja/articles/360013122059

Recommended Posts

XPath Basics (2) - Comment écrire XPath
Comment écrire sobrement avec des pandas
Réutilisation du flacon Comment écrire du HTML
Comment écrire une image de base Docker
Comment écrire un fichier wsgi.py indépendant de l'environnement Django1.9
Remarques sur la rédaction de requirements.txt
Comment définir optuna (comment écrire un espace de recherche)
Comment écrire des commentaires de document Python (Docstrings)
Jupyter Notebook Principes d'utilisation
Bases de PyTorch (1) -Comment utiliser Tensor-
Comment écrire ce processus en Perl?
Comment écrire Ruby to_s en Python
Résumé de l'écriture d'AWS Lambda
Comment écrire des commentaires pydoc et multi-lignes
Réponse à "Comment écrire le problème F02 en temps réel hors ligne"
Comment écrire une instruction ShellScript Bash for
Réponse à "Comment écrire un problème F01 en temps réel hors ligne"
Réponse au "Problème d'écriture en temps réel hors ligne E13"
Comment écrire un document tuple nommé en 2020
[Go] Comment écrire ou appeler une fonction
Comment écrire une instruction de cas bash ShellScript
Comment utiliser xml.etree.ElementTree
Comment utiliser Python-shell
Remarques sur l'utilisation de tf.data
Comment utiliser virtualenv
Grattage 2 Comment gratter
Comment utiliser Seaboan
Comment utiliser la correspondance d'image
Comment utiliser le shogun
Comment installer Python
Comment utiliser Pandas 2
Comment lire PyPI
Comment installer pip
Comment utiliser Virtualenv
Comment utiliser numpy.vectorize
Comment mettre à jour easy_install
Comment installer Archlinux
Comment utiliser pytest_report_header
Comment redémarrer gunicorn
Comment installer python
Comment héberger virtuel
Comment déboguer le sélénium
Comment utiliser partiel
Comment utiliser Bio.Phylo
Comment lire JSON
Comment utiliser SymPy
Comment utiliser x-means
Comment utiliser WikiExtractor.py
Comment mettre à jour Spyder
Comment utiliser IPython
Comment installer BayesOpt
Comment utiliser virtualenv
Comment utiliser Matplotlib
Comment utiliser iptables
Comment utiliser numpy
Comment utiliser TokyoTechFes2015
Comment utiliser venv
Comment utiliser le dictionnaire {}