Problème d'utilisation de wget ou httrack pour mettre en miroir un site Web archivé

12

J'essaie d'utiliser wget pour créer un miroir local d'un site Web. Mais je constate que je ne reçois pas toutes les pages de liens.

Voici le site

http://web.archive.org/web/20110722080716/http://cst-www.nrl.navy.mil/lattice/

Je ne veux pas toutes les pages qui commencent web.archive.org, mais je veux toutes les pages qui commencent http://web.archive.org/web/20110722080716/http://cst-www.nrl.navy.mil/lattice/.

Lorsque j'utilise wget -r, dans ma structure de fichiers, je trouve

web.archive.org/web/20110722080716/http://cst-www.nrl.navy.mil/lattice/index.html,

mais je n'ai pas tous les fichiers qui font partie de cette base de données, par exemple

web.archive.org/web/20110808041151/http://cst-www.nrl.navy.mil/lattice/struk/d0c.html.

Peut-être que httrack ferait mieux, mais en ce moment, c'est trop.

Alors, par quel moyen est-il possible de récupérer une copie locale d'un site Web archivé à partir de l' Internet Archive Wayback Machine?

user695322
la source
Homme! J'ai essayé de refléter exactement la même page (et je me fâche vraiment de ne pas l'avoir fait lorsque le site d'origine était encore en ligne, ce qui aurait été beaucoup plus facile). Je pense qu'un problème est que tous les fichiers ne sont pas accessibles sous l' 20110722080716instantané, donc l' -npoption de wget n'aidera pas.
mpy
Avez-vous vérifié manuellement que les pages manquantes sont réellement archivées? Archive.org n'archive pas toujours chaque page.
nitro2k01

Réponses:

20

Bien qu'elles soient utiles, les réponses antérieures ne parviennent pas à résoudre de manière concise, fiable et répétable la question sous-jacente. Dans cet article, nous détaillons brièvement les difficultés de chacun et proposons ensuite une httracksolution modeste .

Contexte

Avant d'en arriver là, cependant, réfléchissez à la réponse bien écrite de mpy . Dans h [is | er] article malheureusement négligé, mpy documente rigoureusement le schéma d'archivage obscur (et honnêtement obscur) de Wayback Machine.

Sans surprise, ce n'est pas joli. Plutôt que d'archiver sainement des sites dans un seul répertoire, The Wayback Machine répartit de manière éphémère un seul site sur deux ou plusieurs répertoires frères identifiés numériquement. Dire que cela complique la mise en miroir serait un euphémisme substantiel.

Comprendre les horribles pièges présentés par ce schéma est essentiel pour comprendre l'insuffisance des solutions antérieures. Continuons, d'accord?

Solution antérieure 1: wget

La question connexe de StackOverflow "Récupérer l'ancien site Web hors waybackmachine" est probablement le pire contrevenant à cet égard, recommandant la wgetmise en miroir Wayback. Naturellement, cette recommandation est fondamentalement fausse.

En l'absence de réécriture d'URL externes complexes (par exemple, Privoxy), wgetne peut pas être utilisé pour mettre en miroir de manière fiable des sites archivés Wayback. En tant que détails mpy sous "Problème 2 + Solution", quel que soit l'outil de mise en miroir que vous choisissez, vous devez autoriser le téléchargement non transitoire uniquement des URL appartenant au site cible. Par défaut, la plupart des outils de mise en miroir téléchargent de manière transitoire toutes les URL appartenant à la fois au site cible et aux sites liés à partir de ce site - ce qui, dans le pire des cas, signifie «Internet tout entier».

Un exemple concret s'impose. Lors de la mise en miroir de l'exemple de domaine kearescue.com, votre outil de mise en miroir doit :

  • Inclure toutes les URL correspondantes https://web.archive.org/web/*/http://kearescue.com. Ce sont des actifs fournis par le site cible (par exemple, https://web.archive.org/web/20140521010450js_/http_/kearescue.com/media/system/js/core.js).
  • Exclure toutes les autres URL. Ce sont des actifs fournis par d'autres sites simplement liés à partir du site cible (par exemple, https://web.archive.org/web/20140517180436js_/https_/connect.facebook.net/en_US/all.js).

Le fait de ne pas exclure de telles URL entraîne généralement la totalité ou la majeure partie de l'Internet archivé au moment de l'archivage du site, en particulier pour les sites intégrant des ressources hébergées en externe (par exemple, des vidéos YouTube).

Ce serait mauvais. Bien wget qu'il fournisse une --exclude-directoriesoption de ligne de commande acceptant un ou plusieurs modèles correspondant aux URL à exclure, il ne s'agit pas d' expressions régulières à usage général; ce sont des globes simplistes dont la *syntaxe correspond à zéro ou plusieurs caractères à l' exclusion/ . Étant donné que les URL à exclure contiennent arbitrairement de nombreux /caractères, wget elles ne peuvent pas être utilisées pour exclure ces URL et ne peuvent donc pas être utilisées pour mettre en miroir des sites archivés par Wayback. Période. Fin d'une histoire malheureuse.

Ce problème est dans le domaine public depuis au moins 2009. Il doit encore être résolu. Prochain!

Solution antérieure 2: Scrapbook

Prinz recommande ScrapBook, un plugin Firefox. Un plugin Firefox.

C'était probablement tout ce que vous deviez savoir. Alors que ScrapBookde » Filter by String...la fonctionnalité ne adresse mentionnée ci - dessus le « problème 2 + Solution, » il ne pas aborder la suite « Problème 3 + Solution » - à savoir le problème des doublons étrangers.

On peut se demander si, ScrapBookmême de manière adéquate, il résout l'ancien problème. Comme l' admet MPY :

Bien que Scrapbook n'ait pas réussi à saisir le site jusqu'à présent ...

Les solutions peu fiables et trop simplistes sont des non-solutions. Prochain!

Solution antérieure 3: wget + Privoxy

mpy fournit alors une solution robuste exploitant à la fois wgetet Privoxy. Bien qu'il wget soit raisonnablement simple à configurer, il Privoxyest tout sauf raisonnable. Ou simple.

En raison de l 'obstacle technique impondérable d' installer, de configurer et d 'utiliser correctement Privoxy, nous n'avons pas encore confirmé la solution de mpy . Il devrait fonctionner de manière évolutive et robuste. Compte tenu des barrières à l'entrée, cette solution est probablement plus appropriée à l'automatisation à grande échelle que le webmaster moyen tentant de récupérer des sites de petite à moyenne échelle.

Est-ce que wget+ Privoxyvaut le détour? Absolument. Mais la plupart des superutilisateurs pourraient être mieux desservis par des solutions plus simples et plus facilement applicables.

Nouvelle solution: httrack

Enter httrack, un utilitaire de ligne de commande implémentant un surensemble de wgetfonctionnalités de mise en miroir de. httrackprend en charge l'exclusion d'URL basée sur les modèles et la restructuration simplifiée du site. Le premier résout le "Problème 2 + Solution" de mpy ; ce dernier, «Problème 3 + Solution».

Dans l'exemple abstrait ci-dessous, remplacez:

  • ${wayback_url}par l'URL du répertoire de niveau supérieur archivant l'intégralité de votre site cible (par exemple, 'https://web.archive.org/web/20140517175612/http://kearescue.com').
  • ${domain_name}par le même nom de domaine présent en ${wayback_url}excluant le préfixe http://(par exemple, 'kearescue.com').

Et c'est parti. Installez httrack, ouvrez une fenêtre de terminal, cddans le répertoire local dans lequel vous souhaitez que votre site soit téléchargé, et exécutez la commande suivante:

httrack\
    ${wayback_url}\
    '-*'\
    '+*/${domain_name}/*'\
    -N1005\
    --advanced-progressinfo\
    --can-go-up-and-down\
    --display\
    --keep-alive\
    --mirror\
    --robots=0\
    --user-agent='Mozilla/5.0 (X11;U; Linux i686; en-GB; rv:1.9.1) Gecko/20090624 Ubuntu/9.04 (jaunty) Firefox/3.5'\
    --verbose

Une fois terminé, le répertoire actuel doit contenir un sous-répertoire pour chaque type de fichier mis en miroir à partir de cette URL. Cela comprend généralement au moins:

  • css, contenant toutes les feuilles de style CSS en miroir.
  • html, contenant toutes les pages HTML en miroir.
  • js, contenant tout le JavaScript en miroir.
  • ico, contenant un favicon en miroir.

Comme httracktout le contenu téléchargé est réécrit en interne pour refléter cette structure, votre site devrait maintenant être consultable tel quel sans modification. Si vous avez interrompu prématurément la commande ci-dessus et souhaitez continuer le téléchargement, ajoutez l' --continueoption à la même commande exacte et réessayez.

C'est ça. Aucune contorsion externe, réécriture d'URL sujette aux erreurs ou serveurs proxy basés sur des règles requis.

Profitez-en, chers super-utilisateurs.

Cecil Curry
la source
Je suis heureux d'entendre qu'au moins une personne a lu attentivement ma réponse. Et merci pour votre analyse approfondie et la solution httrack. +1
mpy
1
La solution httrack était parfaite, merci beaucoup!
ChrisChinchilla
Heureux d'être d'une aide mineure, les gars. Compte tenu de la façon dont l' intestin wrenchingly terrible cette tapisserie de malheur et de la tromperie était décortiqué, je ne devais partager mes conclusions.
Cecil Curry
Pour supprimer la limite de transfert de débit, ajoutez ces paramètres: --disable-security-limits --max-rate = 0
Oswaldo
7

Malheureusement, aucune des réponses n'a pu résoudre le problème de la création d'un miroir complet à partir d'un site Web archivé (sans dupliquer chaque fichier des dizaines de fois). J'ai donc piraté ensemble une autre approche. Hacké est le mot important car ma solution n'est ni une solution générale ni très simple (lire: copier-coller). J'ai utilisé le serveur proxy Privoxy pour réécrire les fichiers à la volée lors de la mise en miroir avec wget.

Mais d'abord, qu'est-ce qui est si difficile à mettre en miroir depuis la Wayback Machine ?

Problème 1 + Solution

La barre d'outils Wayback est pratique pour une utilisation interactive, mais peut interférer avec wget. Alors débarrassez-vous-en avec une règle de filtre privoxy

FILTER: removewaybacktoolbar remove Wayback toolbar
s|BEGIN WAYBACK TOOLBAR INSERT.*END WAYBACK TOOLBAR INSERT|Wayback Toolbar removed|s

Problème 2 + Solution

Je voulais capturer l'ensemble du site, j'avais donc besoin d'une profondeur de récursion pas trop petite. Mais je ne veux pas que wget explore tout le serveur. Habituellement, vous utilisez l' option sans parent-np de wget à cette fin. Mais cela ne fonctionnera pas ici, car vous voulez obtenir

http://web.archive.org/web/ 20110722080716 /http://cst-www.nrl.navy.mil/lattice/struk/hcp.html

mais aussi

http://web.archive.org/web/ 20110801041529 /http://cst-www.nrl.navy.mil/lattice/struk/a_f.html

(remarquez l'horodatage modifié dans les chemins). Omettre -npfinira par ramper jusqu'à (...)http://cst-www.nrl.navy.milet enfin récupérer tout le navi.milsite. Je ne veux vraiment pas ça! Donc, ce filtre essaie d'émuler le -npcomportement avec la machine Wayback:

FILTER: blocknonparentpages emulate wget -np option
s|/web/([0-9].*)/http://cst-www.nrl.navy.mil/lattice/|THIS_IS_A_GOOD_$1_ADDRESS|gU
s|/web/(.*)/http(.*)([" ])|http://some.local.server/404$3|gU
s|THIS_IS_A_GOOD_(.*)_ADDRESS|/web/$1/http://cst-www.nrl.navy.mil/lattice/|gU

Je vais le laisser comme un exercice pour creuser dans la syntaxe. Ce que fait ce filtre est le suivant: Il remplace toutes les URL Wayback comme http://web.archive.org/web/20110801041529/http://www.nrl.navy.mil/par http://some.local.server/404tant qu'elles ne contiennent pashttp://cst-www.nrl.navy.mil/lattice/ .

Vous devez vous ajuster http://some.local.server/404. Il s'agit d'envoyer une erreur 404 à wget. Privoxy peut probablement faire cela plus élégant. Cependant, le moyen le plus simple pour moi était simplement de réécrire le lien vers une page inexistante sur un serveur http local, donc je suis resté avec cela.

Et, vous devez également ajuster les deux occurrences de http://cst-www.nrl.navy.mil/lattice/pour refléter le site que vous souhaitez mettre en miroir.

Problème 3 + Solution

Et enfin, une version archivée d'une page peut créer un lien vers une page dans un autre instantané. Et cela pour encore un autre. Et ainsi de suite ... et vous vous retrouverez avec beaucoup d'instantanés de la même page - et wget n'arrivera jamais à terminer tant qu'il n'aura pas récupéré tous les instantanés. Je ne veux vraiment pas ça non plus! Ici, cela aide beaucoup, que la machine Wayback soit très intelligente. Vous pouvez demander un fichier

http://web.archive.org/web/ 20110801041529 /http://cst-www.nrl.navy.mil/lattice/struk/a_f.html

même s'il n'est pas inclus dans l' 20110801041529instantané. Il vous redirige automatiquement vers la bonne:

http://web.archive.org/web/ 20110731225728 /http://cst-www.nrl.navy.mil/lattice/struk/a_f.html

Donc, un autre filtre privoxy pour réécrire tous les instantanés sur le plus récent

FILTER: rewritewaybackstamp rewrite Wayback snapshot date
s|/([0-9]{14})(.{0,3})/|/20120713212803$2/|g

En fait, chaque numéro à 14 chiffres inclus dans /.../est remplacé par 20120713212803(ajustez-le à l'instantané le plus récent de votre site souhaité). Cela peut être un problème s'il existe de tels numéros dans la structure du site qui ne proviennent pas de la machine Wayback. Pas parfait, mais bien pour le site Strukturtypen .

La bonne chose à ce sujet est que wget ignore le nouvel emplacement vers lequel il est redirigé et enregistre le fichier - dans l'exemple ci-dessus - sous web.archive.org/web/20110801041529/http://cst-www.nrl.navy.mil/lattice/struk/a_f.html.

Utilisation de wget pour mettre en miroir un site archivé

Donc, enfin, avec ces filtres privoxy (définis dans user.filter) activés dans user.actionvia

{ +filter{removewaybacktoolbar} +filter{blocknonparentpages} +filter{rewritewaybackstamp} }
web.archive.org

vous pouvez utiliser wget comme d'habitude. N'oubliez pas de dire à wget d'utiliser le proxy:

export http_proxy="localhost:8118"
wget -r -p -k -e robots=off http://web.archive.org/web/20120713212803/http://cst-www.nrl.navy.mil/lattice/index.html

J'ai utilisé ces options, mais cela -mdevrait aussi fonctionner. Vous vous retrouverez avec les dossiers

20120713212803
20120713212803cs_
20120713212803im_
20120713212803js_

comme la machine Wayback sépare les images ( im_), les feuilles de style ( cs_) etc. J'ai tout fusionné et utilisé de la magie sed pour remplacer les liens relatifs laids ( ../../../../20120713212803js_/http:/cst-www.nrl.navy.mil/lattice) en conséquence. Mais ce n'est pas vraiment nécessaire.

mpy
la source
1
C'était une réponse inestimable. Votre dissection précise de la structure du site interne de The Wayback Machine a été la clé de la solution basée sur httrack sur laquelle je suis finalement tombé. Vous basculez, mpy.
Cecil Curry
5

wget

--page-requisites
Cette option oblige Wget à télécharger tous les fichiers nécessaires pour afficher correctement une page HTML donnée. Cela inclut des éléments tels que des images, des sons et des feuilles de style référencées.

Normalement, lors du téléchargement d'une seule page HTML, tous les documents requis qui peuvent être nécessaires pour l'afficher correctement ne sont pas téléchargés. L'utilisation de -r avec -l peut aider, mais comme Wget ne fait généralement pas de distinction entre les documents externes et les documents en ligne, on se retrouve généralement avec des "documents feuilles" qui manquent de leurs exigences.

Par exemple, supposons que le document 1.html contient une balise "" faisant référence à 1.gif et une balise "" pointant vers le document externe 2.html. Disons que 2.html est similaire mais que son image est 2.gif et qu'il est lié à 3.html. Disons que cela continue jusqu'à un nombre arbitrairement élevé.

-m
--mirror

Activez les options adaptées à la mise en miroir. Cette option active la récursivité et l'horodatage, définit une profondeur de récursivité infinie et conserve les listes de répertoires FTP. Il est actuellement équivalent à -r -N -l inf --no-remove-listing.

Notez que Wget se comportera comme si -r avait été spécifié, mais seule cette page unique et ses éléments requis seront téléchargés. Les liens de cette page vers des documents externes ne seront pas suivis. En fait, pour télécharger une seule page et toutes ses exigences (même si elles existent sur des sites Web séparés), et s'assurer que le lot s'affiche correctement localement, cet auteur aime utiliser quelques options en plus de -p:

wget -E -H -k -K -p http://<site>/<document>

SO wget -E -H -k -K -p http://web.archive.org/web/20110722080716/http://cst-www.nrl.navy.mil/lattice sera votre meilleur costume pour vous. Mais je recommande un autre outil, une firefoxextensionscrapbook

album

ScrapBook est une extension Firefox qui vous aide à enregistrer des pages Web et à gérer facilement les collections. Les principales caractéristiques sont la légèreté, la vitesse, la précision et la prise en charge multilingue. Les principales fonctionnalités sont:
* Enregistrer la page Web
* Enregistrer l'extrait de page Web
* Enregistrer le site Web
* Organiser la collection de la même manière que les signets
* Recherche en texte intégral et recherche de filtrage rapide de la collection
* Édition de la page Web collectée
* Texte / HTML fonction d'édition ressemblant aux notes d'Opera

Comment mettre en miroir un site
Installer un album et redémarrer Firefox

  1. Charger la page dans le navigateur [page Web à mettre en miroir]
  2. Faites un clic droit sur la page -> Enregistrer la page sous ...
  3. sélectionnez le niveau dans Enregistrer en profondeur et appuyez sur enregistrer entrez la description de l'image ici
  4. sélectionner Restrict to Drirectory/ à Domainpartir du filtre
    entrez la description de l'image ici

Attendez que la mise en miroir soit terminée. Après la mise en miroir, vous pouvez accéder au site Web hors ligne à partir du ScrapBookmenu.

Prinz
la source
Bien que Scrapbook n'ait pas réussi à saisir le site jusqu'à présent, il était plus proche d'une solution possible que les autres suggestions. En particulier, son option Filtrer par chaîne ... était plus utile que de filtrer par hôte / domaine. Par conséquent, je vous accorde la prime:)
mpy
0

Soyez prudent avec la commande ci-dessous car elle prend beaucoup. Le 1 après le «l» lui dit de saisir toutes les pages pour les liens sur le site qui ont 1 niveau de profondeur. Si vous voulez qu'il aille plus profondément, changez-le en 2, mais cela pourrait ne jamais se terminer car il pourrait être pris dans une boucle.

wget -rHpkl 1 -e robots=off http://www.example.com/

Je ne sais pas quelles parties du site vous souhaitez conserver et quelles parties ne vous intéressent pas, mais vous devriez probablement lister et / ou mettre sur liste noire les différentes parties du site pour obtenir uniquement ce que vous voulez et vous empêcher de télécharger tout archive.org ou Internet.

Utilisez -D www.examle.com,www.another.example.compour mettre en liste blanche uniquement les domaines que vous voulez ou utilisez --exclude-domains www.examle.com,www.another.example.com pour mettre sur liste noire ce que vous ne voulez pas.

Michael Yasumoto
la source
Merci, mais le problème avec la liste blanche / noire est que tous les sites Web archivés proviennent de l' web.archive.orghôte. Je veux refléter tout ce wget -npqui se serait reflété une fois que le site d'origine était encore en ligne. -ln'aide pas beaucoup non plus, car il doit être augmenté à 3 ou 4, ce qui entraîne trop de hiérarchisation du site Web.
mpy
0

Le format des URL des archives Internet comprend la date et l'heure d'archivage du site. Pour économiser de l'espace, les ressources qui n'ont pas changé sont liées à une version précédente d'un site.

Par exemple, dans cette URL http://web.archive.org/web/20000229123340/http://www.yahoo.com/ la date à laquelle le site a été exploré était le 29 février 2000 à 12h33 et 40 secondes.

Donc, pour obtenir tout cela, http://web.archive.org/web/20110722080716/http://cst-www.nrl.navy.mil/lattice/vous devez commencer par cela, mais également récupérer tous les actifs liés http://web.archive.org/web/*/http://cst-www.nrl.navy.mil/lattice/.

Brian
la source
Exactement, et c'est le problème. Disons que la page A renvoie à B. Ainsi, la version actuelle A renvoie à l'ancienne version B. Mais B inclut également un lien vers A. Ainsi, l'ancienne version de A est récupérée également et renvoie à une version plus ancienne. Cela (à une profondeur d'exploration de 4 (nécessaire)) conduit au résultat que vous vous retrouvez avec des dizaines de versions de la page d'index, mais pas tous les fichiers nécessaires.
mpy
0

Il existe déjà un outil qui le fait mieux:

wayback_machine_downloader domain.org 

Pour l'obtenir, vous devez avoir installé ruby. Puis:

gem install wayback_machine_downloader
Eduard Florinescu
la source