Estoy intentando utilizar wget para crear un espejo local de un sitio web. Pero descubro que no obtengo todas las páginas de enlaces.
Aquí está el sitio web
http://web.archive.org/web/20110722080716/http://cst-www.nrl.navy.mil/lattice/
No quiero todas las páginas que comiencen con web.archive.org
, pero sí quiero todas las páginas que comiencen con http://web.archive.org/web/20110722080716/http://cst-www.nrl.navy.mil/lattice/
.
Cuando uso wget -r
, en mi estructura de archivos encuentro
web.archive.org/web/20110722080716/http://cst-www.nrl.navy.mil/lattice/index.html,
pero no tengo todos los archivos que forman parte de esta base de datos, por ejemplo
web.archive.org/web/20110808041151/http://cst-www.nrl.navy.mil/lattice/struk/d0c.html.
Quizás a httrack le iría mejor, pero ahora mismo eso está acaparando demasiado.
Entonces, ¿por qué medio es posible obtener una copia local de un sitio web archivado desde el¿Archivo de Internet Wayback Machine?
Respuesta1
Si bien son útiles, las respuestas anteriores no logran resolver la pregunta subyacente de manera concisa, confiable y repetible. En esta publicación, detallamos brevemente las dificultades de cada uno y luego ofrecemos una httrack
solución modesta.
Fondo
Sin embargo, antes de llegar a eso, considere examinarmpyLa respuesta bien escrita. En su publicación tristemente olvidada,mpydocumenta rigurosamente el oscuro (y honestamente ofuscador) esquema de archivo de la Wayback Machine.
Como era de esperar, no es bonito.En lugar de archivar sitios de manera sensata en un solo directorio, Wayback Machine distribuye efímeramente un solo sitio en dos o más directorios hermanos identificados numéricamente. Decir que esto complica la duplicación sería quedarse muy corto.
Comprender los horribles obstáculos que presenta este esquema es fundamental para comprender la insuficiencia de las soluciones anteriores. Sigamos con esto, ¿de acuerdo?
Solución anterior 1: wget
La pregunta relacionada con StackOverflow"Recuperar sitio web antiguo de waybackmachine"es probablemente el peor infractor en este sentido, recomendando wget
la duplicación Wayback. Naturalmente, esa recomendación es fundamentalmente errónea.
En ausencia de una reescritura de URL externa compleja (p. ej., Privoxy
),wget
no se puede utilizar para reflejar de manera confiable los sitios archivados en Wayback.Comompydetalles en "Problema 2 + Solución", cualquier herramienta de duplicación que elija debe permitirle descargar de forma no transitivasoloURL que pertenecen al sitio de destino. De forma predeterminada, la mayoría de las herramientas de duplicación descargan transitivamentetodoURL que pertenecen tanto al sitio de destino como a los sitios vinculados desde ese sitio, lo que, en el peor de los casos, significa "todo Internet".
Un ejemplo concreto es necesario. Al duplicar el dominio de ejemplo kearescue.com
, su herramienta de duplicacióndebe:
- Incluya todas las URL que coincidan
https://web.archive.org/web/*/http://kearescue.com
. Estos son activos proporcionados por el sitio de destino (por ejemplo,https://web.archive.org/web/20140521010450js_/http_/kearescue.com/media/system/js/core.js
). - Excluya todas las demás URL. Estos son activos proporcionados por otros sitios simplemente vinculados desde el sitio de destino (por ejemplo,
https://web.archive.org/web/20140517180436js_/https_/connect.facebook.net/en_US/all.js
).
Al no excluir dichas URL, normalmente se extrae todo o la mayor parte del Internet archivado en el momento en que se archivó el sitio, especialmente en el caso de sitios que incorporan recursos alojados externamente (por ejemplo, vídeos de YouTube).
Eso sería malo.Mientraswget
haceproporciona una --exclude-directories
opción de línea de comando que acepta uno o más patrones que coincidan con las URL para ser excluidos, estos sonnoexpresiones regulares de propósito general; son globos simplistas cuya *
sintaxis coincide con cero o más caracteresExcluyendo/
. Dado que las URL que se excluirán contienen un número arbitrario /
de caracteres,wget
no puedoutilizarse para excluir estas URL y, por lo tanto,no puedoutilizarse para reflejar sitios archivados en Wayback.Período.Fin de la desafortunada historia.
Este problema ha estado enregistro Públicodesde al menos 2009. Aún no se ha resuelto.¡Próximo!
Solución previa 2: álbum de recortes
Prínciperecomienda ScrapBook
, un complemento de Firefox.Un complemento de Firefox.
Probablemente eso era todo lo que necesitabas saber. Mientras que ScrapBook
la Filter by String...
funcionalidadhaceabordar el "Problema 2 + Solución" antes mencionado, nonoabordar el siguiente "Problema 3 + Solución", es decir, el problema de los duplicados superfluos.
Es cuestionable si ScrapBook
se aborda siquiera adecuadamente el primer problema. Comompyadmite:
Aunque Scrapbook no logró hasta ahora capturar el sitio por completo...
Las soluciones poco fiables y demasiado simplistas no son soluciones. ¡Próximo!
Solución anterior 3: wget + Privoxy
mpyluego proporciona una solución sólida que aprovecha tanto wget
y Privoxy
. Mientraswget
esrazonablemente simple de configurar, Privoxy
es todo menos razonable. O sencillo.
Debido al imponderable obstáculo técnico que implica instalar, configurar y usar correctamente Privoxy
, aún tenemos que confirmarmpyLa solución. Éldeberíatrabajar de manera escalable y robusta. Dadas las barreras de entrada, esta solución probablemente sea más apropiada para la automatización a gran escala que el webmaster promedio que intenta recuperar sitios de pequeña y mediana escala.
¿ Vale la pena echarle un vistazo wget
a + Privoxy
?Absolutamente.Pero la mayoría de los superusuarios podrían recibir mejores servicios con soluciones más simples y de más fácil aplicación.
Nueva solución: httrack
Ingrese httrack
, una utilidad de línea de comandos que implementa un superconjunto de wget
la funcionalidad de duplicación de . httrack
admite exclusión de URL basada en patronesyreestructuración simplista del sitio. El primero resuelvempy's "Problema 2 + Solución"; este último, "Problema 3 + Solución".
En el ejemplo abstracto siguiente, reemplace:
${wayback_url}
por la URL del directorio de nivel superior que archiva la totalidad de su sitio de destino (por ejemplo,'https://web.archive.org/web/20140517175612/http://kearescue.com'
).${domain_name}
por el mismo nombre de dominio presente excluyendo${wayback_url}
el prefijohttp://
(por ejemplo,'kearescue.com'
).
Aquí vamos.Instalar httrack
, abra una ventana de terminal, cd
en el directorio local donde desea descargar su sitio y ejecute el siguiente comando:
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
Al finalizar, el directorio actual debe contener un subdirectorio para cada tipo de archivo reflejado desde esa URL. Esto suele incluir al menos:
css
, que contiene todas las hojas de estilo CSS reflejadas.html
, que contiene todas las páginas HTML reflejadas.js
, que contiene todo el JavaScript reflejado.ico
, que contiene un favicon reflejado.
Dado que httrack
internamente reescribe todo el contenido descargado para reflejar esta estructura, su sitio ahora debería poder navegarse tal como está sin modificaciones. Si detuvo prematuramente el comando anterior y desea continuar con la descarga, agregue la --continue
opción exactamente al mismo comando y vuelva a intentarlo.
Eso es todo.No se requieren contorsiones externas, reescritura de URL propensa a errores ni servidores proxy basados en reglas.
Disfruten, compañeros superusuarios.
Respuesta2
Desafortunadamente, ninguna de las respuestas pudo resolver el problema de crear un espejo completo a partir de un sitio web archivado (sin duplicar cada archivo docenas de veces). Así que ideé otro enfoque.Hackeadoes la palabra importante ya que mi solución no es una solución general ni muy simple (léase: copiar y pegar). utilicé elServidor proxy privadopara reescribir los archivossobre la marchamientras se refleja con wget.
Pero primero, ¿qué tiene de difícil reflejar desde el exterior?Máquina Wayback?
Problema 1 + Solución
La barra de herramientas Wayback es útil para uso interactivo, pero puede interferir con wget. Así que deshazte de él con una regla de filtro privoxy.
FILTER: removewaybacktoolbar remove Wayback toolbar
s|BEGIN WAYBACK TOOLBAR INSERT.*END WAYBACK TOOLBAR INSERT|Wayback Toolbar removed|s
Problema 2 + Solución
Quería capturar todo el sitio, por lo que necesitaba una profundidad de recursividad no demasiado pequeña. Pero no quiero que wget rastree todo el servidor. Usualmente usas elsin padresopción -np
de wget para ese propósito. Pero eso no funcionará aquí, porque quieres conseguir
http://web.archive.org/web/20110722080716/http://cst-www.nrl.navy.mil/lattice/struk/hcp.html
pero también
http://web.archive.org/web/20110801041529/http://cst-www.nrl.navy.mil/lattice/struk/a_f.html
(observe la marca de tiempo modificada en las rutas). Al omitirlo, -np
wget terminará arrastrándose hasta (...)http://cst-www.nrl.navy.mil
y finalmente recuperará todo el navi.mil
sitio. ¡Definitivamente no quiero eso! Entonces este filtro intenta emular el -np
comportamiento con la Wayback Machine:
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
Lo dejaré como ejercicio para profundizar en la sintaxis. Lo que hace este filtro es lo siguiente: reemplaza todas las URL de Wayback http://web.archive.org/web/20110801041529/http://www.nrl.navy.mil/
con http://some.local.server/404
el tiempo que lo hagan.nocontener http://cst-www.nrl.navy.mil/lattice/
.
Tienes que adaptarte http://some.local.server/404
. Esto es para enviar un error 404 a wget. Probablemente privoxy pueda hacerlo más elegante. Sin embargo, la forma más fácil para mí era simplemente reescribir el enlace a una página inexistente en un servidor http local, así que me quedé con esto.
Y también necesitas ajustarambas ocurrenciaspara http://cst-www.nrl.navy.mil/lattice/
reflejar el sitio que desea reflejar.
Problema 3 + Solución
Y, finalmente, alguna versión archivada de una página podría vincularse a una página en otra instantánea. Y eso a otro más. Y así sucesivamente... y terminarás con muchas instantáneas de la misma página, y wget nunca logrará finalizar hasta que haya sido recuperada.todoinstantáneas. ¡Realmente yo tampoco quiero eso! Aquí ayuda mucho que la Wayback Machine sea muy inteligente. Puedes solicitar un archivo
http://web.archive.org/web/20110801041529/http://cst-www.nrl.navy.mil/lattice/struk/a_f.html
incluso si no está incluido en la 20110801041529
instantánea. Élautomáticamenteredirigirte al correcto:
http://web.archive.org/web/20110731225728/http://cst-www.nrl.navy.mil/lattice/struk/a_f.html
Entonces, otro filtro privoxy para reescribir todas las instantáneas a la más reciente.
FILTER: rewritewaybackstamp rewrite Wayback snapshot date
s|/([0-9]{14})(.{0,3})/|/20120713212803$2/|g
Efectivamente, cada número de 14 dígitos incluido /.../
se reemplaza con 20120713212803
(ajústelo a la instantánea más reciente del sitio deseado). Esto podría ser un problema si existen números de este tipo en la estructura del sitio que no se originan en la máquina Wayback. No es perfecto, pero está bien para elTipos de estructurassitio.
Lo bueno de esto es que wget ignora la nueva ubicación a la que se redirige y guarda el archivo (en el ejemplo anterior) como web.archive.org/web/20110801041529/http://cst-www.nrl.navy.mil/lattice/struk/a_f.html
.
Usando wget para reflejar el sitio archivado
Entonces, finalmente con estos filtros privoxy (definidos en user.filter
) habilitados en user.action
vía
{ +filter{removewaybacktoolbar} +filter{blocknonparentpages} +filter{rewritewaybackstamp} }
web.archive.org
puedes usar wget como de costumbre. No olvides decirle a wget que use el 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
Utilicé estas opciones, pero -m
también deberían funcionar. Terminarás con las carpetas.
20120713212803
20120713212803cs_
20120713212803im_
20120713212803js_
ya que la máquina Wayback separa imágenes ( im_
), hojas de estilo ( cs_
), etc. Fusioné todo y utilicé algo de magia sed para reemplazar los feos enlaces relativos ( ../../../../20120713212803js_/http:/cst-www.nrl.navy.mil/lattice
) en consecuencia. Pero esto no es realmente necesario.
Respuesta3
obtener
--page-requisitos
Esta opción hace que Wget descargue todos los archivos necesarios para mostrar correctamente una página HTML determinada. Esto incluye elementos como imágenes integradas, sonidos y hojas de estilo a las que se hace referencia.
Normalmente, al descargar una sola página HTML, no se descargan los documentos necesarios para mostrarla correctamente. Usar -r junto con -l puede ayudar, pero dado que Wget normalmente no distingue entre documentos externos e integrados, generalmente uno se queda con "documentos hoja" a los que les faltan sus requisitos.
Por ejemplo, digamos que el documento 1.html contiene una etiqueta "" que hace referencia a 1.gif y una etiqueta "" que apunta al documento externo 2.html. Digamos que 2.html es similar pero que su imagen es 2.gif y enlaza con 3.html. Digamos que esto continúa hasta alcanzar un número arbitrariamente alto.
-m
--mirror
Active las opciones adecuadas para la duplicación. Esta opción activa la recursividad y la marca de tiempo, establece una profundidad de recursividad infinita y mantiene listados de directorios FTP. Actualmente es equivalente a -r -N -l inf --no-remove-listing.
Tenga en cuenta que Wget se comportará como si se hubiera especificado -r, pero solo se descargará esa página y sus requisitos. No se seguirán los enlaces de esa página a documentos externos. En realidad, para descargar una sola página y todos sus requisitos (incluso si existen en sitios web separados) y asegurarse de que el lote se muestre correctamente localmente, a este autor le gusta usar algunas opciones además 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
será tu mejor traje para ti. Pero recomiendo otra herramienta, una firefox
extensión.scrapbook
álbum de recortes
ScrapBook es una extensión de Firefox que le ayuda a guardar páginas web y administrar colecciones fácilmente. Las características clave son la ligereza, la velocidad, la precisión y la compatibilidad con varios idiomas. Las características principales son:
* Guardar página web
* Guardar fragmento de página web
* Guardar sitio web
* Organizar la colección de la misma manera que los marcadores
* Búsqueda de texto completo y búsqueda de filtrado rápido de la colección
* Edición de la página web recopilada
* Texto/HTML función de edición que se asemeja a las notas de Opera
Cómo reflejar un sitio
Instalarálbum de recortes y reinicia Firefox
- Cargar página en el navegador [página web que se va a reflejar]
- Haga clic derecho en la página -> Guardar página como...
- seleccione el nivel deGuardar en profundidad y presione guardar
- Seleccionar
Restrict to Drirectory
deDomain
Filtrar
Espere a que se complete la duplicación. Después de la duplicación, puede acceder al sitio web sin conexión desde ScrapBook
el menú.
Respuesta4
El formato de las URL de Internet Archive incluye la fecha y hora en que se archivó el sitio. Para ahorrar espacio, los recursos que no han cambiado se vinculan a una versión anterior de un sitio.
Por ejemplo en esta URLhttp://web.archive.org/web/20000229123340/http://www.yahoo.com/la fecha en que se rastreó el sitio fue el 29 de febrero de 2000 a las 12:33 y 40 segundos.
Entonces, para obtener todo, http://web.archive.org/web/20110722080716/http://cst-www.nrl.navy.mil/lattice/
debe comenzar con eso, pero también obtener todos los activos vinculados de http://web.archive.org/web/*/http://cst-www.nrl.navy.mil/lattice/
.