Aller au contenu

Comment scraper proprement avec IMPORTXML ?

Antoine Brisset
Antoine Brisset
Temps de lecture : 2 min
Comment scraper proprement avec IMPORTXML ?

Table des matières

Quand on utilise IMPORTXML pour extraire le contenu de plusieurs balises (exemple : toutes les balises h2 d'une page), les différentes valeurs trouvées s'affichent par défaut les unes en dessous des autres, sur plusieurs lignes.

IMPORTXML

C'est embêtant.

Pourquoi ?

Parce que si on ajoute d'autres URLs, on ne peut pas "tirer" la formule vers le bas avec la poignée de recopie.

Cela déclenche en effet une erreur #REF! (message d'erreur : Le résultat n'a pas été développé, pour ne pas écraser les données de X).

Erreur #REF!

Une solution peut être d'utiliser la fonction TEXTJOIN avec comme délimiteur le retour à la ligne, CHAR(10).

TEXTJOIN

Problème : si les balises extraites contiennent un ou plusieurs nœuds "enfants" (par exemple des balises strong à l'intérieur de balises h2), alors ces nœuds enfants se retrouvent dans plusieurs colonnes.

Ils seront donc "séparés" par un retour à la ligne avec TEXTJOIN.

C'est le cas ici avec "isoler les liens" et "internes" car "internes" est dans une balise strong, elle-même à l'intérieur d'une balise h2.

Le h2 est "découpé" dans plusieurs colonnes

La solution ? Utiliser les fonctions d'assistance LAMBDA.

Ici, je vais m'aider de la fonction BYROW, dont j'ai déjà parlé dans une précédente newsletter.

L'objectif : concaténer les données renvoyées par IMPORTXML lorsque celles-ci se déploient sur plusieurs colonnes.

=BYROW(IMPORTXML(A1;"//h2");LAMBDA(row;TRIM(JOIN(" ";row))))

Traduction : pour chaque ligne (row) de données renvoyées par IMPORTXML, concatène-moi chacune des valeurs (JOIN) en supprimant les espaces superflus (TRIM).

0:00
/0:58

BYROW

C'est mieux mais ce n'est pas parfait. Il reste des retours à la ligne récalcitrants.

On va donc ajouter CLEAN pour les supprimer.

CLEAN

Dernière étape. Ajouter un IFERROR devant le tout pour gérer les cas où IMPORTXML renverrait un contenu vide ou une erreur.

IFERROR

Et voilà la formule finale !

=IFERROR(TEXTJOIN(CHAR(10);;BYROW(IMPORTXML(A1;"//h2");LAMBDA(row;CLEAN(TRIM(JOIN(" ";row))))));"no results")
Google Sheets

Antoine Brisset Twitter

Consultant SEO depuis 2010. Je traque les clics inutiles et j'automatise les tâches répétitives pour gagner du temps dans mon quotidien de travailleur du web.


Articles Similaires

Membres Public

Filtrer facilement des valeurs vides avec Google Sheets

📲Je propose désormais des sessions de coaching SEO. Si vous avez besoin d'un accompagnement personnalisé et sur mesure, en SEO ou en édition de sites, rendez-vous ici ! Aujourd'hui, petite astuce pour éviter de devoir utiliser les fonctions FLATTEN + FILTER quand vous devez : 1. convertir une plage

Filtrer facilement des valeurs vides avec Google Sheets
Membres Public

Comment analyser des paramètres d'URL avec Google Sheets ?

L'édition du jour est directement inspirée de l'article paru il y a a quelques jours sur le blog Yapasdequoi d'Aymeric Bouillat. Dans son (très bon) article, Aymeric explique comment faire l'agrégation du nombre de hits Googlebot sur les paramètres d'URL

Comment analyser des paramètres d'URL avec Google Sheets ?
Membres Public

RECHERCHEV dans Google Sheets : comment retourner plusieurs colonnes à la fois ?

Il y a quelques jours, Mickaël Zerrougui a partagé un petit tuto sympa sur la RECHERCHEV en SEO. Si tu l'as loupé, je te le remets ici ⬇️ 🏆 La RechercheV en SEO 🏆 Y'a des SEO qui savent toujours pas utiliser la rechercheV ?😱 Vous en avez marre des

RECHERCHEV dans Google Sheets : comment retourner plusieurs colonnes à la fois ?