Nouvelle fonction de scraping pour Google Sheets

Bonjour,
Gros utilisateur de Google Sheets, frustré par la fonction IMPORTXML, j’ai décidé de lancer ma propre fonction IMPORTFROMWEB.
IMPORTFROMWEB utilise un moteur de scraping puissant et exécute le Javascript des sites cibles.
J’ai aussi travaillé sur l’usabilité avec la possibilité de mettre plusieurs pages en 1 requête (pratique pour retourner des pages d’un search) et chercher plusieurs éléments d’un coup.

Si ça vous enchante, vous pouvez aller la tester ici
https://chrome.google.com/webstore/detail/importfromweb-import-from/mnaonjbjllejbllmijlgcjhcgdpdgmln

N’hésitez pas à me donner votre feedback et surtout suggestions

6 J'aimes

Top :clap::clap:

Quelques mois ont passé… pendant lesquels je ne me suis pas croisé les pouces.
Devant le succès rencontré j’ai du fermer les portes quelques temps et revoir le code.
La nouvelle version est sortie
https://gsuite.google.com/marketplace/app/importfromweb_imports_data_from_any_webs/278587576794

Dorénavant la fonction est bien plus stable, l’experience utilisateur plus aisée et ça passe par un système de proxys pour rendre les pages les plus coriaces.
Je vois passer énormément de demandes sur le forum pour scraper leboncoin… ça fonctionne sans aucun souci avec IMPORTFROMWEB.
Même les résultats de Google Search peuvent être importés.

J’attends votre feedback.

4 J'aimes

ajouté à La toolbox du growth hacker 💎

Hello @Mapi,
Je viens d’essayer à nouveau Importfromweb. J’avais déjà testé en Juillet mais ça ne fonctionnait pas - par manque de temps j’avais laissé tombé…
J’ai de nouveau la même erreur :

Message d’erreur : #ERREUR!
= Erreur d’analyse de formule.

J’ai pourtant essayé avec plusieurs formules d’exemple / templates que tu proposes mais rien ne fonctionne…!

Salut Romain,
Les démos sont optimisées pour la séparation des paramètres en virgules. La France et quelques autres pays fonctionnent avec de point-virgules et du coup ça ne marche pas.
C’est seulement pour les démos. La fonction, elle, fonctionne en français.

(Ça fait parti du backlog)

En fait rien ne fonctionne ! Démo, pas démo, séparation avec virgules, avec point-virgules…
Soit j’ai #ERREUR! (Erreur d’analyse de formule), soit j’ai #NOM? (fonction inconnue).

Si ça peut t’aider, voici le lien du fichier sur lequel je fais les tests :
https://docs.google.com/spreadsheets/d/1pgajV-QMuGjarGSY9DaWoRlGa98AdCbtAan1Hcb9KWE/edit?usp=sharing

Merci Romain pour partager.
Effectivement ça ne marchait pas lorsque j’ai ouvert ton fichier.

J’ai fait Add-ons > IMPORTFROMWEB > Reactivate Add-on.
et ça marche.

Je vais investiguer! Dès que tu as une erreur, n’hésite pas à partager

Ok je viens de comprendre une chose : si je colle l’Xpath directement dans la formule ça ne marche pas. En revanche, ça fonctionne si je colle l’Xpath sur une autre cellule à part, puis y fait référence dans ma formule.

Attention à bien doubler les guillemets ou utiliser des guillemets simples.
"//*[@id=""fiche_entreprise""]" ou "//*[@id='fiche_entreprise']"
Peut-être est-ce la raison?

En effet, le problème semblait venir de là :wink:
Je vais continuer de tester et je te ferai un retour ! En tout cas c’est très prometteur !!

Tu peux en utilisant l’option de texte préformaté :

C’est réglé! Dorénavant les démos marchent aussi en français

Concernant la quantité / rapidité ? Avec importxml on tombe très vite sur le « loading… » interminable, si lancement de plusieurs scrape en même temps.

IMPORTXML est hyper frustrant. C’est ce que j’essaie de régler avec IMPORTFROMWEB.
J’utilise plusieurs systèmes de caching pour éviter ce genre de souci.
Pour la plupart des sites, on peut aller jusqu’à environ 1000 fonctions IMPORTFROMWEB par spreadsheet.
On peut aussi grouper en insérant une plage d’urls dans une même formule (éviter plus d’une vingtaine)

Certains sites prennent plus de temps à scraper à cause des protections (pour ça j’utilise des proxies en rotation), dans ce cas ça retourne « PENDING_REQUEST ». Là il faut attendre un peu puis actualiser avec le bouton « Refresh pending requests ».

Il reste que IMPORTFROMWEB est une « custom function » de G Sheets et que celles-ci ont certaines caractéristiques parfois limitantes. Par exemple, G Sheets n’exécute pas les 1000 fonctions en même temps, mais par petits groupes, donc ça peut prendre un peu de temps.
Mais ça reste beaucoup plus performant que IMPORTXML qui peut devenir inutilisables plusieurs heures!

À la place, je peux aussi connecter l’API directement à la spreadsheet sur demande.
Là ça devient beaucoup plus robuste

1 J'aime

Bonjour,

Je viens de tomber sur votre fonction qui me fait avancer sur mon problème mais je me trouve confronté à des résultats bizarres. Je m’explique :

Je cherche à me créer un tableau qui me permettrait de savoir si un nom de domaine est indexé par google. J’ai imaginé me servir de site:URL et récupérer la phrase présentant le nombre de résultat pour savoir si le site est indexé. J’ai donc récupéré le xpath (//*[@id=« resultStats »]/text()) que j’utilise dans votre fonction IMPORTFROMWEB.

Mon soucis est que sur certain nom de domain, site:URL n’affiche rien et quand j’utilise la fonction il me retourne un résultat.

ex : site:acheter-tadalafil.info me dit que le site n’est pas indexé, mais lorsque j’utilise votre fonction il me retourne « About 5 results ».

Je n’arrive pas à comprendre cette écart. Auriez-vous une idée ?

Merci d’avance

Bonjour,
Tu peux utiliser la fonction IMPORTFROMWEB_getMeta en complément:
Supposons que la formule avec IMPORTFROMWEB est en A1, dans une autre cellule écris:
IMPORTFROMWEB_getMeta(A1, « sourceCodeUrls »)
Ouvre la page de l’URL résultant: ça montre la page telle qu’elle est vue par la fonction.

N’hésite pas à partager une feuille de calcul pour que je regarde

J’ai trouvé d’où venait l’erreur!!

site: était transformé en site%3A…

Problème résolut.

Merci et bravo pour la fonction

Bonjour Mapi,

Merci pour ta réponse.

Je pense ne pas avoir compris le fonction que tu me demande de tester car j’ai une erreur.

Voici le lien vers la feuille : https://docs.google.com/spreadsheets/d/16pP2LilTJcq2n0DMahvtp1JCjlS7GGO7oYj6OZOwVj0/edit?usp=sharing

Comme tu pourra le voir, j’ai des résultats déconnant sur Facebook (écart avec ce qui s’affiche via le lien 1 million vs. 25 millions) et sur kidzartqatar.com j’ai des résultats alors que je ne vois rien en suivant le lien…

Merci de ton aide en tout cas.

J’ai remis les référence en place et d’après ce que je vois ça fonctionne.
Facebook a plus d’1M de résultats, les deux autres aucun (les noms de domaines ne sont pas valides), tout comme la même recherche sur Google