web-dev-qa-db-fra.com

Comment déterminer la requête Xpath vers un point de donnée dans une table à utiliser avec IMPORTXML?

Je cherche à extraire le dernier chiffre financier pour un seul point de données d'une table à l'aide de IMPORTXML.

La page cible affiche trois séries de chiffres financiers pour une entreprise sur des bases trimestrielles et annuelles. Dans ce cas, je ne souhaite que le chiffre "Dette totale" du bilan pour le dernier exercice disponible.

J'ai utilisé la formule IMPORTXML suivante:

=IMPORTXML("https://www.google.com/finance?q=GOOG&fstype=ii","//td[contains(.,'Total Debt')]")

Il en résulte que seule l'étiquette de données affichée verticalement dans deux cellules adjacentes.

Total Debt
Total Debt

J'ai également utilisé cette formule IMPORTXML avec la requête Xpath déterminée à l'aide de Chrome:

=IMPORTXML("https://www.google.com/finance?q=GOOG&fstype=ii","//*[@id='fs-table']/tbody/tr[27]/td[2]")

Il en résulte quatre valeurs (les données de deux états financiers pour deux périodes chacune) affichées verticalement, comme ci-dessous, dans des cellules adjacentes, la troisième valeur étant correcte. Per cette réponse dans une autre discussion, j'ai essayé de supprimer le nœud d'élément "tbody", ce qui entraînait une erreur "# N/A": "Le contenu importé est vide."

4,207.00
15,826.00
5,208.00
5,220.00

Pour le moment, j'essaie d'éviter d'utiliser IMPORTHTML et INDEX pour analyser une table entière, car je n'ai besoin que d'une seule valeur de la table.

Comment puis-je déterminer la requête Xpath pour cette page afin de récupérer (1) le chiffre "Dette totale" pour (2) toujours la période de déclaration la plus récente?

EDIT: Puisqu'il y a deux éléments du même nom, "Total Debt", j'avais également essayé d'utiliser la formule ci-dessous avec et sans prédicats (en ajoutant 1, 2, [dernier], etc. entre crochets) et j'ai renvoyé une erreur avec contenu vide.

=IMPORTXML("https://www.google.com/finance?q=GOOG&fstype=ii","//*[local-name() = 'Total Debt'][1]")
1
Catalyx

Réponse courte

Autant que je sache, en ce qui concerne les requêtes XPath à utiliser avec IMPORTXML, il n’existait pas de méthode simple car la prise en charge de XPath 1.0 n’était pas totalement implémentée et les développeurs de pages Web pouvaient suivre les pratiques pour définir la structure de leurs pages Web.

Explication

Bien que l'utilisation d'outils tels que Chrome Outils de développement ou extensions/add-ons de navigateur puisse s'avérer utile, ces outils ne renvoient parfois pas de requête XPath pouvant être utilisée par IMPORTXML en raison de différences dans la mise en œuvre du support XPath. par les développeurs de chaque outil, par contre, les pages Web peuvent se conformer ou non aux règles XML. Il est donc nécessaire de trouver la requête XPath à utiliser avec IMPORTXML pour analyser la structure de la page Web source et en effectuer plusieurs. essaie.

Requêtes XPath pour le cas d'utilisation

Les requêtes XPath ci-dessous renvoient 5,208.00

1.

//div[@id="balinterimdiv"]//tr[contains(.,'Total Debt')]/td[2]

2.

(//tr[contains(.,'Total Debt')]/td[2])[1]

Explication

La page de référence comprend deux vues pour le bilan: données trimestrielles et données annuelles. Ils semblent tous les deux avoir la même structure, car ils incluent une cellule de tableau (balise td) avec le texte Total Debt. Heureusement, chaque vue se trouve dans une balise div et chacune a son propre identifiant. Par conséquent, pour en obtenir une seule, la première étape de la requête XPath peut être de sélectionner la bonne vue, puis la deuxième ligne droite du tableau (balise tr) et la troisième étape pour sélectionner la cellule droite du tableau (balise td).

Une autre approche consiste à utiliser la construction (xpath_query)[position() = 1] (voir la référence).

Références

1
Rubén

Une façon de faire cela, en supposant que la page soit rendue, consiste à utiliser un plugin ou un add-on pour le générer à votre place. Par exemple, si vous utilisez Firefox, utilisez ce lien.

https://addons.mozilla.org/en-US/firefox/addon/xpath-checker/

ou cela en utilisant Firebug qui est un autre add-on avec cette

http://www.wikihow.com/Find-XPath-Using-Firebug

0
Dale