Des ressources pour débuter du data scraping

Bien le bonjour,
étant dev front end principalement (je fais aussi de l’admin serveur , du php/symfony, du ruby / python depuis peu) je recherche des ressources pour débuter en data scraping.

J’ai en projet de faire une extension firefox pour libérer ses évènements facebook vers le logiciel libre et décentralisé Mobilizon, qui implémente activitypub. Event Liberator qui n’est qu’en draft actuellement.
Je cherche aussi à faire du traitement de logs de conversations (données plutôt bien structurés de façon brute) pour produire des stats.
En php je peine a faire un parseur efficace de logs pour le moment. Mais il faut dire que je n’y ai pas consacré suffisamment de temps.

J’ai vu qu’il existe cheerio et ses data frame en JS pour se faciliter la vie par exemple.

Comme tout le monde ici à l’air assez bien au fait de comment faire du scraping je vous propose de lister des outils et tutos pour adopter des bonnes pratiques quand on ne sait pas trop par où commencer.

J’ai scrappé beaucoup de choses et à chaque fois c’est du fait main car toujours différent…

Mes outils habituels:

  • scripts bash avec curl wget jq csvkit sed awk
  • du python quand il y a besoin d’un peu plus de logique et beautifulsoup pour le xml/html
2 Likes

Hello, pour ma part, je scrape beaucoup avec node.js :

  • le plus simple est effectivement cheerio et request ou request-promise-native qui te permette de plugger cheerio à ta response.

  • pour des use cases plus complexes, tu peux essayer puppeteer, le navigateur chrome en headless et pilotable entièrement par node… Plus lourd à manoeuvrer mais assez impressionnant

Mais je crois que la plupart des gens utilisent Python pour le scraping

3 Likes

Bonjour,

ça ne répondra probablement pas à votre cas d’usage, mais au cas où ça intéresse d’autres personnes, R (le langage de stats et d’analyse et visualisation de données) permet également de faire du scraping. Utile si on l’utilise par ailleurs pour analyser les données.
Il y a beaucoup de ressources à ce sujet en ligne, mais en français on notera notamment : http://larmarange.github.io/analyse-R/scraping.html.

3 Likes

Un peu comme les autres : bash, python et node essentiellement, mais j’en profite pour pointer un petit outil du médialab bien pratique pour certains usages : https://medialab.github.io/artoo/
Sa particularité est de permettre de faire du scraping directement depuis la console du navigateur en injectant jquery et tout un ensemble d’helpers dans la page. Cela sert donc essentiellement pour des données se trouvant dans une seule et même page, mais c’est notamment bien pratique lorsque la page en question se protège du scraping par différents biais, requière une forme d’authentification ou nécessite des clics pour charger plus de contenus, genre pour collecter des commentaires sur un groupe facebook par exemple.

2 Likes

+1 pour le package rvest sous R. Cd. ici un exemple permettant d’aspirer les évaluations d’impact recensées sur le site du 3IE.

Je ne code pratiquement pas mais j’arrive à faire des merveilles avec l’extension WebScraper de Chrome : https://chrome.google.com/webstore/detail/web-scraper/jnhgnonknehpejjnehehllkliplmbmhn?hl=en

1 Like

Une ressource utile pour démarrer serait aussi un point sur le statut légal du scrapping de site web. Aux US, des décisions de justice récentes (cf. ici ou ) indiquent clairement que ça ne peut pas être considéré comme du piratage, mais ça reste très flou en matière de copyrights. Mais qu’en est-il en France ? J’ai trouvé cet article qui me semble très discutable (ie. centré sur des cas d’usage commerciaux), et celui-ci, plus applicable à ce qu’on peut vouloir faire en matière d’analyse/reporting public, mais pas très conclusif. Avez-vous en tête d’autres références ?

1 Like

Rha cool ça fait un paquet de choses à tester X)

J’ai réussi à faire quelques trucs avec cheerio et webscrapper pour firefox,
mais je tombe sur un os quand je veux faire une récupération des données d’évènements publiés sur ce site de communautés de commune:
https://www.cc-paysdelimours.fr/agenda

cliquer sur un évènement ne change pas l’url, du coup le webscrapper est perdu. J’ai tenté de rentrer des liens en version popup mais sans succès.
voici ma config qui ne fonctionne pas bien mais qui comporte les champs que je recherche dans la page faiblement découpée.

{"_id":« agenda_ccpl »,« startUrl »:[« https://www.cc-paysdelimours.fr/agenda"],« selectors »:[{« id »:« lien »,« type »:« SelectorLink »,« parentSelectors »:["_root"],« selector »:".result_5365805 img »,« multiple »:true,« delay »:0},{« id »:« opening »,« type »:« SelectorText »,« parentSelectors »:[« lien »],« selector »:".openings p",« multiple »:false,« regex »:"",« delay »:0},{« id »:« tarif »,« type »:« SelectorText »,« parentSelectors »:[« lien »],« selector »:".rates p",« multiple »:false,« regex »:"",« delay »:0},{« id »:« addr_et_contact »,« type »:« SelectorText »,« parentSelectors »:[« lien »],« selector »:« div.contact »,« multiple »:false,« regex »:"",« delay »:0}]}

la personne en charge de ces évènements m’a dit qu’ils utilisaient un truc pour les associations qui s’appelle API days qui doit être un plugin wordpress, mais je ne trouve pas grand chose de concluant dessus. J’ai tenté de leur faire utiliser un openagenda mais c’est pas évident pour eux de ne serait-ce que comprendre l’intérêt d’avoir des formats ouverts pour que les gens puissent s’abonner à l’agenda, au lieu de devoir revenir sur le site web et se taper leur interface à deux sous pour avoir les infos.

si j’avais un objectif de scraping en ce moment ce serait de pouvoir récupérer automatiquement les évènements de cet agenda et les publier sur openagenda, ou autre part qui permettrait de faire un lien .ical

Les joies du scrapping :wink:

C’est jamais deux fois pareil… alors les recettes à appliquer faut oublier.

Donc là, un petit coup d’outil dev dans Firefox indique un appel à:

https://widgets.apidae-tourisme.com/widget/247.js

Cela retourne un bout de javacript… qui contient entre autre de l’HTML… si on fournit le referer https://www.cc-paysdelimours.fr/agenda

Un peu de parsing pour récupérer les appels aux détails des évènements… qui on la forme: https://widgets.apidae-tourisme.com/details/247.js?apidae_id=5443829

On les appelle… pour récupérer à nouveau un bout de javascript avec un innerHTML d’où sortir ce qu’on veut.

Voilà en ligne de commande la récupération de la liste des URL à appeler:

curl 'https://widgets.apidae-tourisme.com/widget/247.js' -H 'Referer: https://www.cc-paysdelimours.fr/agenda' -s | \
grep innerHTML | \
sed 's/<div/\n<div/g' | \
grep "https://widgets.apidae-tourisme.com/details/247.js?apidae_id=" | \
sed 's!^.*https://widget!https://widget!;s!\\".*$!!'

Oui, ça pique un peu les yeux !

L’apidae (et pas API days) c’est un groupement d’offices du tourisme… qui devrait publier tout ça en opendata mais ne le veut pas si ma mémoire est bonne.

2 Likes