Tutoriel: télécharger des volumes numérisés sur HathiTrust

Les bibliothèques américaines qui ont signé un accord de numérisation de leurs fonds avec Google ont décidé, devant les problèmes d’accessibilité des résultats dans Google Books, de construire leur propre plateforme d’accès à leurs collections. Cette plateforme, http://www.hathitrust.org/, est structurée comme un catalogue classique de bibliothèque, selon les règles de la bibliothéconomie, et permet de faire des recherches par auteurs, titres, genre, dates de publication… sans compter les recherches plein texte.
HathiTrust
Même les volumes encore sous droit peuvent être interrogés, ce qui permet par exemple de vérifier la pagination de citations, de repérer des occurrences… Il existe aussi une API permettant des interrogations complexes, mais elle ne couvre pour l’instant qu’une partie du domaine anglo-saxon (voir le post de blog de Ted Underwood).
Occurrences de terme dans un ouvrage sous droit.
Occurrences de terme dans un ouvrage sous droit.
L’accord avec Google limite malheureusement l’utilisation de cette plateforme: les volumes peuvent seulement être feuilletés ou téléchargés page à page (sauf si l’on dispose d’un identifiant d’une des universités partenaires); en Europe, suite aux procès intentés à Google par plusieurs éditeurs, tout ce qui pourrait potentiellement être encore sous droit n’est pas accessible, ce qui nous empêche d’accéder à la quasi-totalité des numérisations de revues en ligne, comme La Plume, La Revue blanche, mais aussi des revues plus difficiles d’accès comme La Vogue – une restriction qu’on regrette d’autant plus quand on voit que ces numérisations sont souvent de meilleure qualité que celles de la BnF: ce sont souvent les exemplaires originaux (et non les reprints) qui ont été numérisés, et  les couvertures ont souvent été conservées.
Heureusement, des outils existent pour accéder aux volumes, même en Europe. Le plus simple consiste à installer un plug-in pour Firefox qui permet de choisir entre différents proxys ; AnonymoX permet de choisir de se connecter comme un utilisateur américain et d’accéder à la totalité des numérisations dans le domaine public.
AnonymoX s'intègre à Firefox et permet de se connecter via un proxy américain.
AnonymoX s’intègre à Firefox et permet de se connecter via un proxy américain.
Pour télécharger les volumes, on peut utiliser Hathi Download Helper: il s’agit d’un programme Windows, mais on peut le faire fonctionner sous Mac avec un logiciel comme WineBottler.
HathiDownloadHelper
HathiDownloadHelper intègre des proxys qu’on peut utiliser en cochant la case « use proxy server », mais le logiciel n’a plus été développé depuis plusieurs mois et les proxys ne fonctionnent plus pour la plupart. Pour l’utiliser, il vaut mieux lancer au préalable un programme permettant de faire passer toutes les connexions de l’ordinateur par un proxy. Le plus simple à utiliser et le plus rapide en version gratuite reste CyberGhost ; il faut attendre quelques dizaines de secondes avant de pouvoir se connecter mais la connexion est très fiable.
Une fois CyberGhost en marche (en ayant sélectionné un proxy américain), on peut lancer HathiDownloadHelper: dans la première partie du logiciel, on copie l’adresse du volume qu’on souhaite télécharger et on clique sur « get book info »; une fois les informations récupérées, on peut sélectionner dans la deuxième partie la manière dont on souhaite télécharger le volume (il vaut mieux sélectionner le format images à 200%) et le lieu de sauvegarde puis cliquer sur « start download » (on pouvait auparavant télécharger également le texte océrisé des pages, mais les dernières versions d’HathiTrust ne permettent plus cette manipulation). On peut finalement fusionner toutes les pages en un seul fichier pdf dans la troisième partie du logiciel.

Pyllica: un outil de récupération automatisée de données sur gallica.bnf.fr

Les numérisations de Gallica sont devenues des outils essentiels pour toute recherche sur les périodiques du XIXe siècle, mais les conditions d’accès aux fichiers du site ne sont pas les plus pratiques qui soient, surtout si l’on souhaite récupérer la totalité des numéros d’un périodique par exemple. Pierre-Carl Langlais, qui vient de soutenir une thèse brillante consacrée à la « La formation de la chronique boursière dans la presse quotidienne française« , avait déjà analysé le problème et proposé un « scraper », un outil de récupération automatisée des fichiers textes de l’ancienne version de Gallica (voir son article « Peut-on faire du data mining sur Gallica ») permettant d’obtenir de larges corpus qu’on pouvait ensuite analyser avec des outils de statistique textuelle comme RTemis, Iramuteq, TXM, Tropes
Cette première version ne fonctionnait que sur des documents qui avaient fait l’objet d’une reconnaissance optique de caractères; depuis la mise en place de la nouvelle version de Gallica (que l’on avait pu tester sous le nom de Gallicalabs), cet outil ne fonctionnait plus.  Ayant besoin pour un projet d’un vaste corpus de revues numérisées sur Gallica, j’ai retroussé mes manches pour revoir le code original de Pyllica et proposer quelques outils supplémentaires, permettant par exemple de récupérer directement les images en haute qualité ou les pdf de n’importe quel document. Pierre-Carl Langlais a accepté de fusionner cette nouvelle version à Pyllica; elle est à présent disponible sur la page github du projet, où les étapes d’installation et les modalités d’utilisation des différents outils qui composent Pyllica sont exposées.  Je reprends ci-dessous ces éléments en rajoutant quelques images et explications.

 

Installation et usage

Pyllica est un programme en Python 3, qui fait appel à l’extension beautiful soup (plus d’informations par ici). Pour l’utiliser, vous devez avoir une version de Python à jour (cf. les recommandations officielles pour une installation sous Windows, Mac et Linux) et télécharger Beautiful Soup (sous Mac, avec la commande « $ pip3 install beautifulsoup4 » dans le Terminal – sous Windows, c’est un peu plus complexe).

Pyllica se compose de quatre outils:

  • Pyllicalabs permet d’extraire les fichiers en texte brut de numéros de périodiques qui ont été océrisés, selon une fourchette définie par l’utilisateur;
  • Pyllicalabspdf permet d’extraire les pdf de numéros de périodiques;
  • Pyllicalabsjpg permet d’extraire les pages d’un document sous forme de fichier jpg, tif ou png, avec une qualité définie par l’utilisateur;
  • Pyllicalabsjpgpress permet de faire la même opération pour des numéros de périodiques.

Pour chacun des outils, il y a deux fichiers: un fichier contenant le programme, et un fichier d’instruction (commençant par le mot « action »). Pour utiliser un outil, il suffit de placer les deux fichiers dans un nouveau dossier et de modifier le fichier d’instruction en fonction des livres ou périodiques que l’on veut télécharger.

dossier_pyllica
Un dossier prêt pour le téléchargement.

Sous Mac, s’il y a des problèmes d’encodage du texte au moment de l’utilisation des outils, il ne faut pas cliquer sur le fichier d’instruction pour le lancer mais démarrer IDLE depuis le Terminal ($ idle3) et faire Fichier > Ouvrir pour lancer l’action.

Pyllicalabs

On place les deux fichiers (pyllicalabs.py et actionpyllicalabs.py) dans un dossier, et on modifie le contenu du fichier actionpyllicalabs en fonction des numéros du périodique qu’on veut télécharger:

textpress(url="http://gallicalabs.bnf.fr/ark:/12148/cb32817642h/date", 
        title="lemoderniste", 
        year=1889, 
        month=5, 
        day=25, 
        item=52, 
        rate=7, 
        lastpage=11)

La fonction comprend les commandes suivantes :
url: on indique l’adresse sur Gallica de la page du périodique indiquant toutes les années disponibles (cette adresse doit finir par « date »).
title: on choisit un titre qui sera indiqué dans le nom du fichier.
year, month, day: la date du premier numéro qu’on souhaite télécharger.
item: le nombre de fichiers qu’on veut récupérer.
rate: le nombre de jours entre chaque numéro – cela fonctionne bien pour les quotidiens (on indique 1), les hebdomadaires (on indique 7); en cas de problème, on peut inscrire 1 et préciser dans « item » le nombre total de jours dans la période qu’on veut télécharger (par exemple, pour un an on inscrira 365), cela permettra d’être certain de télécharger tous les numéros, même si cela produit des erreurs (les dates sans numéros).
lastpage: avec la nouvelle version de Gallica, la numérotation des pages n’est pas importante, on peut laisser cet élément tel quel.

Une fois le fichier action modifié, on l’ouvre avec Python et on lance le script (sous Mac, Run > Run module).

La dernière version intègre des règles en cas d’exception: si l’outil ne trouve pas un des numéros (par exemple, si le périodique n’est pas disponible pour une des dates), un message avertit du problème mais le téléchargement des numéros suivants continue.

Pyllicalabspdf

Comme l’outil précédent, il permet de récupérer les fichiers pdf de périodiques; la méthode d’utilisation est la même.

Pyllica en action.
Pyllica en action: les pdf apparaissent dans le dossier.

Pyllicalabsjpg

La nouvelle version de Gallica utilise la norme IIIF, permettant de récupérer les images en haute résolution. Pour l’utiliser avec un document unique, il suffit de récupérer l’identifiant du document dans l’adresse de gallicalabs (ce qui suit ark:), par exemple: /12148/btv1b86000454/

On insère ces chiffres (en conservant bien les slash) dans le fichier actionpyllicalabspg.py au niveau de la variable « identifier », on choisit un titre (« title ») pour les fichiers de sortie et on sélectionne la première et la dernière page (attention, il faut choisir en fonction des numéros des vues et non de la pagination réelle du document). On place ce fichier et le fichier pyllicalabs3jpg.py dans le dossier de destination et on le lance avec Python.

On peut changer la résolution souhaitée en modifiant la fin de l’url dans le fichier pyllicalabsjpg.py (par exemple, full/5000/0/native.jpg au lieu de full/3000/0/native.png). On peut aussi récupérer les images au format png ou tif en remplaçant la mention « jpg » par « png » ou « tif » à la fin de l’adresse et du format de fichier créé:

for page in listpage:
        jpgfile = title + "_" + str(page) + ".png"
        url = 'http://gallicalabs.bnf.fr/iiif/ark:' + identifier + '/f' + str(page) + '/full/3000/0/native.png'
        urllib.request.urlretrieve(url, jpgfile)

Pyllicalabsjpgpress

Pour récupérer les images d’une série de numéros de périodiques, on part de l’adresse du périodique avec les dates:http://gallicalabs.bnf.fr/ark:/12148/cb34427442r/date et on supprime la fin de l’adresse « /date » pour l’intégrer dans le fichier actionpyllicalabsjpgpress.py dans la variable « url ».

Il faut ici tenir compte de la pagination; on peut gonfler le nombre de pages au cas ou certains documents comportent plus de pages, les erreurs s’afficheront dans le shell avant que le programme ne continue avec le numéro suivant du périodique. Par exemple, pour un journal de 8 pages, il vaut mieux indiquer 12 pages pour être certain que des numéros plus longs seront entièrement téléchargés.

N’hésitez pas à me contacter en cas de problèmes d’utilisation.