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 automatise les tâches répétitives pour gagner du temps dans mon quotidien de travailleur du web.


Articles Similaires

Membres Public

Importer des datasets facilement grâce aux fonctions nommées de Google Sheets

Aujourd'hui, je vais te montrer comment importer facilement un jeu de données que tu utilises souvent à l'intérieur de tes feuilles Google Sheets. Exemple : tu travailles sur du SEO local et tu as besoin, régulièrement, de récupérer la liste des 36000 communes françaises. Pour éviter de devoir à chaque fois

Importer des datasets facilement grâce aux fonctions nommées de Google Sheets
Membres Public

L'astérisque comme alternative à la fonction AND dans Google Sheets

Les formules Google Sheets, c'est bien, mais quand on commence à enchaîner les ouvertures de parenthèses pour imbriquer plusieurs fonctions, ça devient vite indigeste. Aujourd'hui, je vais te donner une astuce toute simple pour réduire le nombre de parenthèses dans tes IF. En général, pour tester si plusieurs conditions sont

L'astérisque comme alternative à la fonction AND dans Google Sheets
Membres Public

Comment calculer la fréquence d'un mot dans une liste de mots-clés avec Google Sheets ?

Il y a quelques jours, alors que je faisais une rapide étude de mots-clés pour l'un de mes sites, j'ai voulu connaître les termes qui revenaient le plus fréquemment parmi les Google Suggests que j'avais scrapés. L'objectif : sélectionner les bons termes à intégrer dans chacune de mes balises title. J'ai

Comment calculer la fréquence d'un mot dans une liste de mots-clés avec Google Sheets ?