Déb/u/o/gue tes humanités
Saison 04

Archivage de données

Formateur·trice·s :
Louis-Olivier Brassard, Giulia Ferretti
Lieu :
Bibliothèque des lettres et sciences humaines, local 2074
Date et heure :
(13h-15h)
Lien de la visioconférence :
https://meet.jit.si/DebogueHumanitesCRCEN-BLSH
Impression (bêta) :
Version imprimable
Support de présentation (cliquez pour ouvrir en grand ↗)

Sommaire

# Plan de la séance

  1. Introduction
  2. Qu’est-ce que Wget ?
  3. Installation
  4. Premier téléchargement avec Wget
  5. Télécharger des images en vrac avec Wget
  6. Archiver des documents web avec Wget
  7. Conclusion

# 0. Introduction

Internet donne accès à une quaisi-infinité de contenus, disponibles sur demande vingt-quatre heures par jour, chaque jour de l’année. Comme c’est pratique !

… jusqu’au jour où ce n’est plus vrai : bande passante au ralenti ou connexion coupée, site web en maintenance ou hors service, archives disponibles uniquement par VPN ou depuis une adresse autorisée, etc. Les raisons deviennent soudainement de plus en plus nombreuses d’assurer un accès aux ressources dont on a besoin pour travailler, comme une base de données, des images précises ou des textes particuliers. Bref, il faut une stratégie d’archivage.

Pour y parvenir, nous vous proposons aujourd’hui un outil : wget !

# 1. Qu’est-ce que Wget ?

wget est un logiciel qui fonctionne en ligne de commande. Il permet d’effectuer des téléchargements avec diverses options et protocoles. Nous verrons en quoi ces options peuvent être utiles !

Nous allons nous en servir aujourd’hui pour archiver certains objets d’étude disponibles en ligne, mais que nous souhaitons pouvoir consulter hors connexion.

Pour un rappel sur le fonctionnement du terminal (l’interface en ligne de commande), jetez un coup d’œil à la séance 01 de la saison 4.

Une bonne compréhension de la notion de fichiers et de dossiers est également essentielle !

# 2. Installation

Si vous utilisez macOS ou Linux, wget est probablement déjà installé. Vous pouvez vous en assurer en ouvrant une fenêtre de terminal et en entrant :

# cela affichera le message d'aide de wget
wget --help

Sur Windows, vous pouvez utiliser Cygwin (émulateur de commandes Unix pour Windows) ou Ubuntu bash sur Windows 10 pour avoir accès à wget. Vous pouvez aussi télécharger wget directement depuis ce site qui en fait la distribution.

Installation sur Linux
sudo apt install wget
Installation sur macOS
# avec Homebrew
brew install wget

# 3. Premier téléchargement avec Wget

Nous allons effectuer un premier téléchargement tout simple avec wget.

Par exemple, nous allons archiver l’image d’une toile de l’artiste suprématiste Kasimir Malevitch sur Wikimedia Commons.

Sur la page de l’image Wikimedia Commons, nous allons cliquer sur le bouton «  Télécharger  ». Dans la boîte de dialogue, plusieurs champs s’offrent à nous :

Boîte de dialogue d’un fichier sur Wikimédia Commons

Boîte de dialogue d’un fichier sur Wikimédia Commons

Dans la boîte de dialogue, copier l’URL du fichier, puis le coller dans le terminal, en remplaçant url-du-fichier par la véritable URL :

wget url-du-fichier

# ...

# si tout s'est bien passé, wget devrait avoir téléchargé
# l'image dans le répertoire courant!

Nous pouvons examiner le résultat avec la commande ls :

ls

# la console devrait retourner notre fichier téléchargé
# -> Amsterdam_-_Stedelijk_Museum_-_Kazimir_Malevich_...

Et la même chose dans notre explorateur de fichiers :

Le fichier que nous venons de télécharger avec Wget

Le fichier que nous venons de télécharger avec Wget

Bravo ! Vous avez fait votre premier téléchargement avec wget !

… mais il est vrai que c’est assez peu excitant (nous aurions pu tout simplement sauvegarder l’image directement depuis la page de Wikmédia Commons).

Examinons un cas où wget s’avérera encore plus utile !

# 4. Télécharger des images en vrac avec Wget

# 4.1 Une image unique sur Gallica

De nombreux objets d’étude, comme un livre ou un journal, consistent en une série de plusieurs numérisations – une image pour chaque page numérisée. Nous pouvons tirer parti de ce découpage sur des plateformes comme Gallica pour archiver les pages qui nous intéressent !

Comment pourrions-nous numériser les dix premières pages du roman Une saison en enfer d’Arthur Rimbaud, accessible librement grâce à la plateforme de la BNF ?

Dans le film The Social Network (2010), le personnage de Mark Zuckerberg mentionne l’outil Wget pour récupérer les photos du serveur de son université.

Dans le film The Social Network (2010), le personnage de Mark Zuckerberg mentionne l’outil Wget pour récupérer les photos du serveur de son université.

Bien sûr, l’utilisation d’un outil comme wget devrait toujours respecter les lois, règlements et principes du savoir-vivre. Les agissements du créateur de Facebook demeurent en ce sens discutables et sont utilisés à des fins d’exemple seulement.
Une saison en enfer d’Arthur Rimbaud, affichage d’un exemplaire disponible sur Gallica.

Une saison en enfer d’Arthur Rimbaud, affichage d’un exemplaire disponible sur Gallica.

Un clic droit sur l’image permet d’accéder à l’URL de l’image via le menu contextuel.

Dans cet exemple, la nouvelle commence à partir du 13e folio numérisé.

Vous pouvez copier cette URL pour effectuer le téléchargement avec wget :

# créez-vous un dossier de travail et naviguez-y
# 1. creation du dossier
mkdir mon-dossier-pour-apprendre-wget

# 2. se déplacer dans le dossier
cd mon-dossier-pour-apprendre-wget

# on récupère l'image du folio no. 13 avec la commande wget
wget https://gallica.bnf.fr/ark:/12148/btv1b86108277/f13.highres

# 4.3 Télécharger une liste d’images

Nous voulons archiver les 10 premières pages du livre. Nous pourrions poursuivre en répétant la commande wget, mais en incrémentant le numéro de folio (13, 14, …), à la fin de l’URL (...f13.highres) :

wget https://gallica.bnf.fr/ark:/12148/btv1b86108277/f14.highres

wget https://gallica.bnf.fr/ark:/12148/btv1b86108277/f15.highres

wget https://gallica.bnf.fr/ark:/12148/btv1b86108277/f16.highres

# ... et ainsi de suite

Cela est un peu redondant ! Nous pourrions automatiser ces opérations répétitives afin de lancer le téléchargement en arrière-plan, ce qui nous permettrait de faire autre chose pendant ce temps – une façon judicieuse de gagner son temps, surtout pour des téléchargements très longs avec de nombreux fichiers !

Nous allons mettre à profit ce que nous avons appris avec la notion de texte brut, ou le format .txt.

wget peut lire une liste d’URLs à partir d’un fichier. On pourrait donc créer un fichier liste-urls.txt qui ressemblerait à ceci :

1
2
3
4
http://exemple.com/image1.jpg
http://exemple.com/image2.jpg
http://exemple.com/image3.jpg
...

Pour lancer le téléchargement de cette liste d’images inscrite dans le fichier, on peut utiliser l’option -i (ou --input-file) de wget :

# Pour lancer le téléchargement à partir d'une liste dans un fichier

wget -i liste-urls.txt
Attention ! On se rappelle que le format Microsoft Word .docx n’est pas un format texte, mais un format binaire, dans lequel le texte ne peut pas être lu directement. Le format texte brut (ou format texte, tout court) ne contient rien d’autre que le texte qu’on tape dans un éditeur tel que Notepad, TextEdit ou Vim.

Si cette liste est très longue, elle pourrait s’avérer fastidieuse à faire à la main, et nous pourrions risquer d’y introduire des erreurs. Un script pourrait nous aider à générer la liste de manière rapide et fiable !

Si vous avez python installé sur votre appareil, essayez l’étape suivante !

# 4.3 Utilisation d’un script python (optionnel)

Créez un fichier generateur-urls.py. Remplissez-le avec le bloc de code suivant.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#!/usr/bin/python
# -*- coding: utf-8 -*-

# Liste des urls (séparées par des sauts de ligne `\n`),
# qu'on va écrire ligne par ligne dans le fichier `urls.txt`.
urls = '';

# L'URL de base, avec un jeton `%d` à remplacer par un numéro de
# folio. Le suffixe `.medres` permet d'avoir une image en
# résolution moyenne, bien suffisant pour nos besoins.
# (On pourrait aussi utiliser les extensions `.highres` ou `.lowres`)
baseUrl = 'https://gallica.bnf.fr/ark:/12148/btv1b86108277/%d.medres';

# on ouvre le fichier `liste-urls.txt` pour pouvoir écrire dedans pendant
# la boucle (ne pas oublier de le fermer à la fin)
fichier = open('liste-urls.txt', 'w')

# Itération sur un intervalle de pages avec la variable `x`
# ici, les folios 13 à 23 (il faut inclure la borne supérieure)
for x in range(13, 24):
    # on crée une URL à partir de l'itération, en remplaçant le jeton `%d`
    # par la valeur actuelle de `x`
    url = baseUrl % (x)
    # et on ajoute un saut de ligne à la fin de chaque URL lorsqu'on écrit
    # dans le fichier
    fichier.write(url + '\n')

# Lorsque la boucle est terminée, on ferme le fichier
fichier.close

Il ne reste plus qu’à lancer le script :

# ce script devrait remplir le fichier `liste-urls.txt`
python generateur-urls.py

On a ainsi un fichier liste-urls.txt rempli avec tous les folios que nous voulons télécharger.

# on peut examiner le contenu du fichier avec la commande `cat`
cat liste-urls.txt

Lançons à présent le téléchargement de nos pages avec wget :

# la commande wget, avec quelques options
wget \
  -i liste-urls.txt \
  --limit-rate=100k \
  --directory-prefix=rimbaud-une-saison-en-enfer \
  --continue

# ... 
# pour chaque fichier, wget affichera un état d'avancement

Et voilà le résultat final : un répertoire avec nos images archivées, juste pour nous !

tree .
.
├── generateur-urls.py
├── liste-urls.txt
└── rimbaud-une-saison-en-enfer/
    ├── 13.medres
    ├── 14.medres
    ├── 15.medres
    ├── 16.medres
    ├── 17.medres
    ├── 18.medres
    ├── 19.medres
    ├── 20.medres
    ├── 21.medres
    ├── 22.medres
    └── 23.medres

Le même résultat, dans l’exploratur de fichiers (interface graphique).

Le même résultat, dans l’exploratur de fichiers (interface graphique).

# 5. Archiver des documents web avec Wget

On peut utiliser wget pour sauvegarder une page web, ou même un site web au complet !

L’option --mirror (ou -m) peut justement être pratique pour créer une «  copie miroir  » d’un site web localement sur sa machine.

# 6. Archiver une page web

Télécharger une page html avec wget. Ajouter l’option -P (ou --directory-prefix) pour indiquer le dossier dans lequel la page doit être enregistrée. -O (ou --output-document) pour changer le nom du fichier. --adjust-extension pour ajouter une extension appropriée aux fichiers téléchargés (cela s’applique principalement aux pages HTML).

wget \
  https://fr.wikipedia.org/wiki/Orang-outan \
  --directory-prefix=dossier-sur-les-orangs-outans
  --output-document=page-wikipedia.html \
  --adjust-extension \
  --limit-rate=200k

# 6.1 Archiver uniquement certains fichiers d’un site web

Télécharger uniquement les fichiers d’un format donné à partir d’un site web. L’option -c ou --continue permet de continuer un téléchargement interrompu.

wget https:/skhole.ecrituresnumeriques.ca/ \
  -r \
  -l2 \
  -nd \
  -A.mp3 \
  -c \
  -P archives-audio-skhole

# 7. Archiver un site web au complet

Télécharger un site web au complet. (Attention : l’option --mirror n’est pas toujours autorisée.)

wget [URL] \
  --mirror \
  --convert-links \
  --adjust-extension \
  --page-requisites \
  --no-parent \
  --limit-rate=200k

# 8. Conclusion

Nous espérons que vous avez compris l’utilité de l’outil wget et qu’il vous aidera à mettre en place vos propres stratégies d’archivage. Vous aurez compris à la lumière de cet atelier qu’il peut être judicieux de combiner wget avec un langage de programmation, comme python ou bash. Ce n’est qu’une pièce parmi tant d’autres dans votre boîte à outils !