Accueil » Dataviz » Récolter les données » Web scraping avec des commandes unix simples [Tuto]
Le web scraping ou comment aspirer les données d'un site

Web scraping avec des commandes unix simples [Tuto]

Web scraping avec des commandes unix simples [Tuto]
4.6 (91.43%) 7 vote[s]

Aujourd’hui, avec plus d’un milliard de sites, internet regorge d’informations. Il peut vous être utile de savoir comment récupérer automatiquement des données vous concernant par exemple, pour votre usage personnel à titre informatif. C’est là qu’intervient le web scraping.
Ce tutoriel réalisé sur Mac OS donne quelques pistes pour débuter…

Le web scraping, c’est quoi ?

Le webscraping est une technique qui permet d’extraire du contenu d’un site web via un script ou un programme. Ce script va parcourir le code HTML et aspirer les éléments qui nous intéressent.
Par exemple, Google Apps Script permet d’ajouter des fonctionnalités aux feuilles de calcul de Google. Parmi elles, il y a la possibilité de faire du web scraping…
Si l’on veut juste récupérer des données dans un fichier sur sa machine, il y a de nombreuses possibilités, avec Python, Perl… mais aussi avec quelques commandes Unix simples. Ainsi sur un OS Linux ou Mac, il est possible, depuis son terminal de récupérer le contenu d’une page en HTML

Scraper une page web et la transformer en texte

Première étape : préparation de l’espace de travail

1/ Après vous être connecté à internet, ouvrez le terminal.

2/ Créez un dossier sur votre bureau avec le commande mkdir. Ce dossier est destiné à recevoir les fichiers.
Dans notre cas le dossier se nommera mon_dossier_scraping.dir

cd Bureau
mkdir mon_dossier_scraping.dir

3/ Entrez dans ce dossier

cd mon_dossier_scraping.dir

Deuxième étape : récupérer le code HTML de la page

1/ Nous allons utiliser la commande curl pour récupérer la page html dans un fichier texte.
Sur Mac OS la commande curl est préinstallée. La commande wget est une alternative à curl, pour l’installer, vous aurez besoin du gestionnaire d’installation de logiciel Homebrew (voir ici comment procéder : https://docs.brew.sh/Installation avec la commande brew install wget)

2/ Choisissez une page web. Je décide pour ma part de m’auto-scraper en aspirant la page https://www.radarweb.fr/creation-site-web/

Tapez la commande suivante dans le terminal :

curl https://www.radarweb.fr/creation-site-web/ > ma_page_html.txt

On a donc maintenant le fichier ma_page_html.txt dans notre dossier mon_dossier_scraping.dir.

3/ Visualisez le fichier ma_page_html.txt dans le terminal avec la commande more.

more ma_page_html.txt 

Ce fichier contient le code source de la page html scrapée

Troisième étape : transformer le code HTML en texte

1/ Pour transformer le code source HTML en fichier texte, vous aurez besoin d’installer html2text avec la commande :

brew install html2text

2/ Pour parser ensuite le fichier avec html2text et placer le résultat dans le fichier nouvelle_page.txt, tapez la commande suivante dans le terminal :

html2text ma_page_html.txt > nouvelle_page.txt

3/ Visualisez le fichier généré :

more nouvelle_page.txt

4/ Il est possible que html2text ajoute des caractères invisibles dans le fichier (que vous pouvez visualiser avec la commande:

cat -t nouvelle_page.txt

qui peuvent nuire aux autres commandes Unix nécessaires pour nettoyer les données, par exemple, html2text peut ajouter des \b ou autres…

On peut alors utiliser Awk et taper dans le terminal la commande :

html2text ma_page_html.txt  | awk -F' *\\|' 'NR>2 {gsub(/^\||.\b/, ""); $1=$1; print}' > page_optimise.txt

Pour voir le résultat :

more page_optimise.txt

La page texte générée devra encore être nettoyée (avec d’autres commandes, par exemple grep, awk, sed…), mais c’est un bon début !

Scraper des URLs dans une page web

Pour pourriez avoir besoin de rassembler toutes les URLs contenues dans une page web, par exemple pour faire un rapport.
Voici les principales étapes :

Première étape : récupérer la page dans un fichier

Pour récupérer notre page https://www.radarweb.fr/data-visualisation/

curl https://www.radarweb.fr/data-visualisation/ > fichier_url_tmp.txt

et visualiser le fichier

more fichier_url_tmp.txt

Deuxième étape : trouver les URLs

2/ On va utiliser ensuite la commande grep et diriger le résultat dans le fichier mes_URL.txt

cat fichier_url_tmp.txt | grep -Eo "(http|https)://[a-zA-Z0-9./?=_-]*" > mes_URL.txt

Pour visualiser le résultat dans le terminal :

more mes_URL.txt

3/ Si vous avez besoin de compter le nombre d’URL en enlevant les doublons possibles, il faut faire un « sorting » avec sort, utiliser en plus de grep la commande uniq et compter avec wc -l

cat fichier_url_tmp.txt | grep -Eo "(http|https)://[a-zA-Z0-9./?=_-]*" | sort | uniq | wc -l

ou en plus court :

cat fichier_url_tmp.txt | grep -Eo "(http|https)://[a-zA-Z0-9./?=_-]*" | sort -u | wc -l

Nous obtenons 111 car 111 URLs sont présentes sur cette page à la date de la manip.

Pour ce deuxième test nous n’avons pas transformé la page HTML en texte comme dans le premier exemple, mais nous nous sommes servi des balises HTML et des commandes UNIX pour extraire l’information qui nous intéresse.

Bonus : Scraper plusieurs pages d’un site web

Admettons que votre site contiennent 4 pages et que leurs URLs s’écrivent toutes sous la forme :
https://mysite/myfolder/index?page=1
https://mysite/myfolder/index?page=2
https://mysite/myfolder/index?page=3
https://mysite/myfolder/index?page=4
(s’il n’y a que 4 pages à récupérer pas besoin de script, mais avec plusieurs centaines c’est une autre affaire !)

Nous allons mettre le début de l’URL commun dans une variable, lancer une boucle répétée 4 fois et écrire le résultat dans un fichier avec la commande suivante :

curl `page='https://mysite/myfolder/index?page=' ; for (( i = 1; i <= 4; i++ )); do echo $page${i} ; done` >> myHTML.html

Pour conclure

Ce tuto introductif de web scraping avec des commandes Unix simples donne une idée du potentiel de ces méthodes.
Attention n’utilisez ces techniques que dans le cadre strict de la législation en vigueur !

Pour aller plus loin

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée.

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.

Me contacter

Natacha Oliveira