Le IMPORTXML de Google Sheets est une fonction qui vous permet d'importer des données à partir de types de données structurées comme HTML et XML. Elle prend aussi en charge l'importation de données depuis des flux CSV, TSV, RSS et ATOM XML. C'est donc un excellent outil pour importer des données de sites web à des fins de web scraping ou d'exploration de données.
IMPORTXML lit une page publiée sur le web, via son URL. Ce n'est pas le moyen de charger un fichier .xml enregistré sur votre ordinateur.
Syntaxe
=IMPORTXML(url, xpath_query, locale)
- url – l'adresse de la page web structurée dont vous voulez importer les données. Il y a deux façons de l'indiquer :
- Sous forme d'adresse complète, en texte entre guillemets (par exemple, "https://en.wikipedia.org/wiki/Tiger_Woods")
- Sous forme de référence à une cellule qui contient l'url.
- xpath_query – this is the XPath query to run on the structured data. Simply put, this specifies the information we are trying to fetch. For instance, using “//h1/@id” gives all the id attributes within the anchor <h1> tags on the page. Consultez les règles de syntaxe XPath pour des instructions détaillées.
Si c'est nouveau pour vous, le paramètre xpath_query peut sembler un peu déroutant. Mais il est aussi puissant que déroutant, alors nous vous encourageons à l'explorer.
Exemple d'IMPORTXML
=IMPORTXML(url, "all the hyperlink titles in the page")
Dans l'exemple ci-dessous, j'importe les données dans la cellule B3 : c'est donc là que je saisis la formule.
La formule que j'ai utilisée inclut l'url entre guillemets, comme indiqué plus haut. Elle utilise la requête XPath "//a/@title" pour récupérer tous les titres des liens hypertextes de l'article.
Essayez la formule ! Un message vous avertit que la feuille de calcul tente d'envoyer et de recevoir des données : il suffit d'autoriser l'accès pour obtenir toutes les informations.
=IMPORTXML(“https://en.wikipedia.org/wiki/Tiger_Woods“, "//a/@title")
Voici ce qui s'affiche pendant que Google Sheets tente de récupérer les données. Plus le fichier de données structurées contient de nœuds, plus l'importation prend du temps.
Pendant l'importation des données, la cellule dans laquelle vous avez saisi la formule semble afficher une erreur.
Ce n'est pourtant pas une erreur, mais un état temporaire qui indique que les données sont en cours de chargement. Survolez la cellule avec la souris pour voir la description suivante.
Dès que Google Sheets a chargé les données, l'erreur disparaît. Vous remarquerez que les données s'étendent de la cellule de la formule (B3) vers la droite et vers le bas.
Il s'agit d'une fonction à expansion automatique, ce qui signifie que toutes les valeurs récupérées seront placées dans les cellules situées en dessous.
Il est important de laisser la zone prévue pour le résultat libre de toute valeur. Sinon, la formule IMPORTXML renverra une erreur #REF!.
Par exemple, l'image suivante montre ce qui se passe si cette plage contient des valeurs.
Dans cet exemple, j'ai enregistré dans la cellule B1 une url qui pointe vers la page dont j'essaie d'importer les titres.
J'utilise cette cellule comme référence dans la formule IMPORTXML :
=IMPORTXML(B1,"//h2")
Comme vous pouvez le voir, les données récupérées ici sont différentes de celles de l'exemple précédent, même si l'URL est la même.
Cette fois, j'obtiens la liste des titres de l'article, ce qui peut être utile pour de nombreuses raisons. Si vous voulez importer d'autres informations depuis l'URL, je vous encourage à en savoir plus sur les requêtes XPath.
Plus d'exemples XPath pour IMPORTXML
Le paramètre xpath_query détermine ce qu'IMPORTXML extrait de la page. Ces requêtes couvrent les besoins les plus courants. Remplacez l'URL par la page que vous voulez lire, ou faites référence à une cellule qui la contient.
Extraire tous les liens d'une page
=IMPORTXML("https://en.wikipedia.org/wiki/Tiger_Woods", "//a/@href")
Cette requête renvoie l'adresse de chaque lien de la page, un par ligne. Les liens vers d'autres pages du même site sont généralement renvoyés sous forme de chemins relatifs, comme /wiki/PGA_Tour. Si vous utilisez plutôt "//@href", vous obtenez aussi le href d'autres balises, comme les feuilles de style et les icônes.
Extraire uniquement les liens externes
=IMPORTXML("https://www.example.com/", "//a[starts-with(@href, 'http') and not(contains(@href, 'example.com'))]/@href")
La requête conserve les liens qui commencent par http, ce qui exclut les chemins relatifs, puis supprime tout lien qui renvoie vers le même domaine. Remplacez example.com par le domaine de la page que vous lisez.
Obtenir l'URL canonique d'une page
=IMPORTXML("https://www.example.com/page/", "//link[@rel='canonical']/@href")
Le lien canonique est la version d'une page que son propriétaire désigne comme la version préférée, pour éviter le contenu dupliqué. Cette requête renvoie cette URL unique.
Autres requêtes utiles
//titlerenvoie le titre de la page.//meta[@name='description']/@contentrenvoie la meta description.//*[@id='main']renvoie l'élément dont l'id est main.//div[contains(@class, 'price')]renvoie toutes les div qui ont price parmi leurs classes.
Pour des données présentes dans un tableau ou une liste, la formule IMPORTHTML est généralement plus simple.
Importxml n'a pas pu récupérer l'url
Ce message d'erreur de Google Sheets signifie généralement qu'un problème est survenu lors de la récupération des données.
Cette erreur peut avoir plusieurs causes, notamment :
- URL non valide: vérifiez que l'URL indiquée dans la fonction IMPORTXML est correcte, y compris http ou https. La page a peut-être aussi changé d'adresse.
- Problèmes de réseau: cette erreur est parfois due à des problèmes de réseau temporaires. Patientez un peu et réessayez.
- Restrictions d'accès: le site web auquel vous essayez d'accéder applique peut-être des restrictions. Dans ce cas, il n'y a pas grand-chose à faire, à moins de pouvoir demander un accès.
- Modification de la structure de la page: si la fonction marchait auparavant mais que la structure de la page a changé, la requête XPath risque de ne plus fonctionner correctement. Mettez à jour la requête XPath pour qu'elle corresponde à la nouvelle structure de la page web.
- Le contenu importé est vide: la formule a atteint la page, mais n'a rien trouvé qui corresponde à la requête. Vérifiez la requête XPath, puis ouvrez le code source de la page dans votre navigateur pour confirmer que les données figurent dans le HTML. Les pages qui chargent leur contenu avec JavaScript l'affichent dans le navigateur, mais IMPORTXML ne voit que le HTML envoyé par le serveur.
- Le site bloque Google Sheets: certains sites, dont plusieurs sites de données financières, refusent les requêtes de l'outil de récupération de Google. La page s'ouvre dans votre navigateur, mais la formule ne parvient toujours pas à la récupérer. Aucune modification de la formule ne règle ce problème : utilisez une autre source ou l'API du site.
- Trop de formules: chaque formule IMPORTXML envoie sa propre requête, et Google Sheets les actualise environ toutes les heures. Un fichier qui en contient des centaines se charge lentement et peut atteindre les limites d'un site. Mieux vaut quelques formules qui renvoient chacune une liste complète.
IMPORTXML en résumé
Vous pouvez aussi consulter l'article suivant pour apprendre à importer dans Google Sheets les données d'un tableau ou d'une liste d'une page HTML avec la fonction IMPORTHTML de Google Sheets ou Comment utiliser la formule IMPORTFEED. Pour importer un fichier CSV ou TSV depuis une URL, utilisez la formule IMPORTDATA, et pour importer des données d'une autre feuille de calcul, utilisez IMPORTRANGE.
Note de la rédaction: Il s'agit d'une version révisée d'un article précédent qui a été mis à jour pour plus de précision et d'exhaustivité.




