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
N’hésitez pas à me donner votre feedback et surtout suggestions
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
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.
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.
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).
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?
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
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 ?
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
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…
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