Archivage de site Web

J'ai récemment plongé profondément dans le sujet de l'archivage de sites Web. Des amis m'ont demandé qui avaient peur de perdre le contrôle de leur travail sur Internet en raison d'une mauvaise administration du système ou d'une suppression hostile. Ces menaces font de l'archivage de sites Web un outil important pour tout administrateur système. Il s'est avéré que certains sites sont beaucoup plus difficiles à archiver que d'autres. Cet article illustre le processus d'archivage des sites Web traditionnels et montre comment cela ne fonctionne pas sur les applications à page unique à la mode qui attirent le Web moderne.

Convertir des sites simples


L'époque où les sites Web étaient écrits manuellement en HTML est révolue depuis longtemps. Maintenant, ils sont dynamiques et construits à la volée en utilisant les derniers frameworks JavaScript, PHP ou Python. En conséquence, les sites sont devenus plus fragiles: les plantages de bases de données, les fausses mises à jour ou les vulnérabilités peuvent entraîner une perte de données. Dans ma vie antérieure en tant que développeur Web, j'ai dû accepter l'idée: les clients s'attendent à ce que les sites Web fonctionnent pour toujours. Cette attente ne cadre pas bien avec le principe du développement web "aller vite et casser les choses". Travailler avec le système de gestion de contenu Drupal s'est révélé particulièrement difficile à cet égard, car les mises à jour volumineuses violent intentionnellement la compatibilité avec des modules tiers, ce qui implique un processus de mise à jour coûteux que les clients peuvent rarement se permettre. La solution consistait à archiver ces sites: créer un site Web dynamique et vivant - et le transformer en de simples fichiers HTML que tout serveur Web peut fournir à tout jamais. Ce processus est utile pour vos propres sites dynamiques, ainsi que pour les sites tiers qui sont hors de votre contrôle et que vous souhaitez protéger.

Les sites simples ou statiques sont gérés par le vénérable Wget . Bien que vous ayez besoin d'un vrai sort pour refléter l'ensemble du site:

$ nice wget --mirror --execute robots=off --no-verbose --convert-links \ --backup-converted --page-requisites --adjust-extension \ --base=./ --directory-prefix=./ --span-hosts \ --domains=www.example.com,example.com http://www.example.com/ 

Cette commande charge le contenu de la page Web et analyse également tous les liens dans les domaines spécifiés. Avant de lancer cette action sur votre site préféré, réfléchissez aux conséquences possibles de l'exploration. La commande ci-dessus ignore intentionnellement les règles robots.txt , comme c'est désormais le cas pour les archivistes , et télécharge le site à la vitesse maximale. La plupart des robots d'exploration ont des options pour faire une pause entre les appels et les limites de bande passante afin de ne pas créer de charge excessive sur le site cible.

Cette commande reçoit également des "détails de page", c'est-à-dire des feuilles de style (CSS), des images et des scripts. Le contenu chargé de la page change de sorte que les liens pointent vers une copie locale. L'ensemble de fichiers résultant peut être hébergé sur n'importe quel serveur Web, représentant une copie statique du site Web d'origine.

Mais c'est là que tout se passe bien. Quiconque a déjà travaillé avec un ordinateur sait que les choses se passent rarement comme prévu: il existe de nombreuses façons intéressantes de perturber la procédure. Par exemple, il y a quelque temps, il était à la mode de mettre des blocs avec un calendrier sur les sites. CMS les générera à la volée et enverra les robots d'exploration dans un cycle sans fin, essayant d'obtenir de plus en plus de nouvelles pages. Les archivistes rusés peuvent utiliser des expressions régulières (par exemple, Wget a l'option --reject-regex ) pour ignorer les ressources problématiques. Autre option: si l'interface d'administration du site Web est disponible, désactivez les calendriers, les formulaires de connexion, les formulaires de commentaires et d'autres zones dynamiques. Dès que le site devient statique, ils cesseront de fonctionner de toute façon, il est donc logique de supprimer ce gâchis du site d'origine.

Cauchemar JavaScript


Malheureusement, certains sites Web sont bien plus que du HTML. Par exemple, sur les sites à page unique, le navigateur Web lui-même crée du contenu en exécutant un petit programme JavaScript. Un simple agent utilisateur tel que Wget tentera en vain de restaurer une copie statique significative de ces sites, car il ne prend pas du tout en charge JavaScript. Théoriquement, les sites devraient prendre en charge l'amélioration progressive afin que le contenu et les fonctionnalités soient accessibles sans JavaScript, mais ces directives sont rarement suivies, comme le confirmera toute personne utilisant des plugins comme NoScript ou uMatrix .

Les méthodes d'archivage traditionnelles échouent parfois de la manière la plus stupide. Lorsque j'ai essayé de sauvegarder un journal local, j'ai constaté que WordPress ajoute des chaînes de requête (par exemple ?ver=1.12.4 ) à la fin de l'inclusion. Cela est source de confusion pour détecter le type de contenu sur les serveurs Web qui servent l'archive, car ils dépendent de l'extension de fichier pour produire l'en Content-Type tête de Content-Type correct. Lorsqu'une telle archive est téléchargée sur le navigateur, elle ne peut pas charger de scripts, ce qui brise les sites Web dynamiques.

Comme le navigateur devient progressivement une machine virtuelle pour exécuter du code arbitraire, les méthodes d'archivage basées sur une analyse HTML pure doivent être adaptées. La solution à ces problèmes consiste à enregistrer (et lire) les en-têtes HTTP fournis par le serveur lors de l'exploration, et les archivistes véritablement professionnels utilisent cette approche.

Création et affichage de fichiers WARC


Dans les archives Internet, Brewster Calais et Mike Burner ont développé le format ARC (ARChive) en 1996: un moyen de combiner des millions de petits fichiers créés lors de l'archivage. Au final, le format a été normalisé en tant que spécification WARC (Web ARChive), publié en tant que norme ISO en 2009 et révisé en 2017. Efforts de normalisation menés par l' International Conservation Consortium (IIPC). Selon Wikipédia, c'est «une organisation internationale de bibliothèques et d'autres organisations créées pour coordonner les efforts visant à préserver le contenu Internet pour l'avenir», et comprend des membres tels que la Bibliothèque du Congrès et les archives Internet. Ce dernier utilise le format WARC dans son robot Java Heritrix.

Un fichier WARC combine plusieurs ressources dans une archive compressée, telles que les en-têtes HTTP, le contenu du fichier et d'autres métadonnées. De manière pratique, ce format est également pris en charge par le robot d'indexation Wget avec l' --warc . Malheureusement, les navigateurs ne peuvent pas afficher directement les fichiers WARC, donc une visionneuse spéciale est requise pour accéder à l'archive. Ou vous devez le convertir. Le visualiseur le plus simple que j'ai trouvé est pywb , un package Python. Il lance un simple serveur Web avec une interface comme Wayback Machine pour afficher le contenu des fichiers WARC. L'ensemble de commandes suivant mappera le fichier WARC à http://localhost:8080/ :

  $ pip install pywb $ wb-manager init example $ wb-manager add example crawl.warc.gz $ wayback 

Soit dit en passant, les développeurs du service Webrecorder ont créé cet outil, qui enregistre le contenu dynamique de la page à l'aide d'un navigateur.

Malheureusement, pywb ne peut pas charger les fichiers WARC générés par Wget car il obéit aux exigences incorrectes de la spécification WARC 1.0 , qui ont été corrigées dans la version 1.1 . Jusqu'à ce que Wget ou pywb résolvent ces problèmes, les fichiers WARC créés par Wget ne sont pas assez fiables, j'ai donc personnellement commencé à chercher d'autres alternatives. Mon attention a été attirée sur le robot sous le nom simple crawl . Voici comment ça commence:

  $ crawl https://example.com/ 

Le programme prend en charge certains paramètres de ligne de commande, mais la plupart des valeurs par défaut sont assez fonctionnelles: il télécharge des ressources comme CSS et des images d'autres domaines (si l' -exclude-related n'est pas spécifié), mais la récursivité ne dépassera pas l'hôte spécifié. Par défaut, dix connexions simultanées sont démarrées: ce paramètre est modifié avec l'indicateur -c . Mais plus important encore, les fichiers WARC résultants se chargent correctement dans pywb.

Travaux futurs et alternatives


Il existe de nombreuses ressources pour utiliser les fichiers WARC. En particulier, il existe un Wget de remplacement appelé Wpull , spécialement conçu pour l'archivage des sites Web. Il a un support expérimental pour PhantomJS et une intégration avec youtube-dl , ce qui vous permettra de télécharger des sites JavaScript plus complexes et de télécharger des médias en streaming, respectivement. Le programme est le fondement de l' outil d' archivage ArchiveBot , qui est développé par "l'équipe gratuite d'archivistes, programmeurs, écrivains et conférenciers espiègles" d' ArchiveTeam dans le but de "sauvegarder l'histoire avant qu'elle ne disparaisse à jamais". Il semble que l'intégration de PhantomJS ne soit pas aussi bonne que nous le souhaiterions, donc ArchiveTeam utilise un tas d'autres outils pour mettre en miroir des sites plus complexes. Par exemple, snscrape analyse les profils des médias sociaux et génère des listes de pages à envoyer à ArchiveBot. Un autre outil est crocoite , qui exécute Chrome en mode sans tête pour archiver des sites avec beaucoup de JavaScript.

Cet article serait incomplet sans mentionner les «sites Xerox» de HTTrack . Comme Wget, le programme HTTrack crée des copies locales des sites, mais, malheureusement, il ne prend pas en charge l'enregistrement sur WARC. Les fonctionnalités interactives peuvent être plus intéressantes pour les utilisateurs novices qui ne connaissent pas la ligne de commande.

Dans le même esprit, au cours de mes recherches, j'ai trouvé une alternative à Wget appelée Wget2 avec prise en charge du travail multi-thread, ce qui accélère le programme. Cependant, certaines fonctionnalités Wget manquent ici, y compris les modèles, l'enregistrement sur WARC et la prise en charge FTP, mais la prise en charge RSS, la mise en cache DNS et la prise en charge TLS améliorée ont été ajoutées.

Enfin, mon rêve personnel pour de tels outils serait de les intégrer à mon système de bookmarking existant. Je stocke actuellement des liens intéressants dans Wallabag , un service de stockage local pour les pages intéressantes, développé comme une alternative au programme gratuit Pocket (maintenant propriété de Mozilla). Mais Wallabag dans sa conception ne crée qu'une version «lisible» de l'article au lieu d'une copie complète. Dans certains cas, la «version lisible» est en fait illisible et Wallabag ne peut parfois pas gérer l'analyse . Au lieu de cela, d'autres outils, tels que l' archiveur de signets ou la réminiscence , enregistrent une capture d'écran de la page avec le code HTML complet, mais, malheureusement, ne prennent pas en charge le format WARC, qui fournirait une lecture encore plus précise.

La triste vérité de ma mise en miroir et de mon archivage est que les données se meurent. Heureusement, les archivistes amateurs ont à leur disposition les outils pour enregistrer du contenu intéressant sur Internet. Pour ceux qui ne veulent pas le faire par eux-mêmes, il existe une archive Internet, ainsi que le groupe ArchiveTeam, qui travaille à la création d'une copie de sauvegarde de l'archive Internet elle-même .

Source: https://habr.com/ru/post/fr431222/


All Articles