Problemas al usar wget o httrack para reflejar el sitio web archivado

12

Estoy tratando de usar wget para crear un espejo local de un sitio web. Pero descubro que no obtengo todas las páginas de enlace.

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 comienzan con web.archive.org, pero sí quiero todas las páginas que comienzan 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, p. ej.

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

Quizás httrack lo haría mejor, pero en este momento eso es demasiado.

Entonces, ¿por qué medios es posible obtener una copia local de un sitio web archivado de Internet Archive Wayback Machine?

usuario695322
fuente
¡Hombre! Traté de reflejar exactamente la misma página (y realmente me enojé por no haberlo hecho cuando el sitio original todavía estaba en línea, lo que habría sido mucho más fácil). Creo que un problema es que no todos los archivos son accesibles bajo la 20110722080716instantánea, por lo tanto, la -npopción de wget no ayudará.
mpy
¿Ha verificado manualmente que las páginas que faltan están realmente archivadas? Archive.org no siempre archiva todas las páginas.
nitro2k01

Respuestas:

20

Si bien son útiles, las respuestas anteriores no resuelven de manera concisa, confiable y repetida la pregunta subyacente. En esta publicación, detallamos brevemente las dificultades con cada uno y luego ofrecemos una httracksolución modesta .

Antecedentes

Antes de llegar a eso, sin embargo, considere leer detenidamente la respuesta bien escrita de mpy . En h [is | er] publicación tristemente descuidada, mpy documenta rigurosamente el oscuro y oscuro esquema de archivo de Wayback Machine.

Como era de esperar, no es bonito. En lugar de archivar sitios de manera sensata en un solo directorio, The Wayback Machine distribuye efímeramente un solo sitio en dos o más directorios de hermanos identificados numéricamente. Decir que esto complica la duplicación sería una subestimación sustancial.

Comprender los escollos horribles presentados por este esquema es fundamental para comprender la insuficiencia de las soluciones anteriores. Sigamos con eso, ¿de acuerdo?

Solución anterior 1: wget

La pregunta relacionada con StackOverflow "Recuperar sitio web antiguo de la máquina wayback" es probablemente el peor delincuente a este respecto, y recomienda la wgetduplicación de Wayback. Naturalmente, esa recomendación es fundamentalmente errónea.

En ausencia de una reescritura de URL externa compleja (p. Ej. Privoxy), wgetNo se puede utilizar para reflejar de manera confiable sitios archivados por Wayback. Como mpy detalles en "Problema Solución 2 +", cualquier herramienta que opta por la duplicación debe permitir a los no-transitiva descarga sólo las URL que pertenecen al sitio de destino. De manera predeterminada, la mayoría de las herramientas de duplicación descargan de forma transitiva todas las URL 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 está en orden. Al reflejar el dominio de ejemplo kearescue.com, su herramienta de duplicación debe :

  • 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).
  • Excluir 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 tales URL, generalmente se obtiene todo o la mayor parte de Internet archivado en el momento en que se archivó el sitio, especialmente para los sitios que incorporan activos alojados externamente (por ejemplo, videos de YouTube).

Eso sería malo. Mientras wget lo hace proporcionar una línea de comandos --exclude-directoriesopción de aceptar uno o más patrones coincidentes URL ser excluido, estos son no expresiones regulares de uso general; son globos simplistas cuya *sintaxis coincide con cero o más caracteres excluyentes/ . Dado que las URL que se excluirán contienen arbitrariamente muchos /caracteres, wget no se pueden usar para excluir estas URL y, por lo tanto , no se pueden usar para reflejar sitios archivados en Wayback. Período. Fin de la historia desafortunada.

Este problema ha estado en registro público desde al menos 2009. Todavía no se ha resuelto. ¡Próximo!

Solución anterior 2: Scrapbook

Prinz recomienda ScrapBook, un complemento de Firefox. Un complemento de Firefox.

Eso fue probablemente todo lo que necesitabas saber. Mientras ScrapBook's Filter by String...funcionalidad hace dirección de la mencionada 'Problema 2 + Solution', lo hace no aborda la posterior 'Problema 3 + Solution' - a saber, el problema de duplicados extraños.

Es cuestionable si ScrapBookincluso aborda adecuadamente el problema anterior. Como admite mpy :

Aunque Scrapbook no logró capturar el sitio por completo ...

Las soluciones poco confiables y demasiado simplistas son no soluciones. ¡Próximo!

Solución anterior 3: wget + Privoxy

mpy proporciona una solución robusta que aprovecha ambos wgety Privoxy. Si bien wget es razonablemente simple de configurar, Privoxyes cualquier cosa menos razonable. O simple

Debido al obstáculo técnico imponderable de la instalación, configuración y uso adecuados, Privoxytodavía tenemos que confirmar la solución de mpy . Se debe trabajar de una manera escalable y robusta. Dadas las barreras de entrada, esta solución es probablemente más apropiada para la automatización a gran escala que el webmaster promedio que intenta recuperar sitios de pequeña a mediana escala.

Es wget+ Privoxydigno de una mirada? Absolutamente. Pero la mayoría de los superusuarios podrían recibir un mejor servicio con soluciones más simples y más fácilmente aplicables.

Nueva solución: httrack

Enter httrack, una utilidad de línea de comandos que implementa un superconjunto de wgetla funcionalidad de duplicación. httrackadmite la exclusión de URL basada en patrones y la reestructuración de sitios simplista. El primero resuelve el "Problema 2 + Solución" de mpy ; este último, "Problema 3 + Solución".

En el siguiente ejemplo abstracto, 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 al ${wayback_url}excluir el prefijo http://(por ejemplo, 'kearescue.com').

Aquí vamos. Instale httrack, abra una ventana de terminal, cden el directorio local en el que desea que se descargue 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 generalmente incluye al menos:

  • css, que contiene todas las hojas de estilo CSS reflejadas.
  • html, que contiene todas las páginas HTML reflejadas.
  • js, que contiene todos los JavaScript reflejados.
  • ico, que contiene un favicon reflejado.

Dado que httrackinternamente reescribe todo el contenido descargado para reflejar esta estructura, su sitio ahora debe ser navegable sin modificaciones. Si detuvo prematuramente el comando anterior y desea continuar con la descarga, agregue la --continueopción al mismo comando y vuelva a intentarlo.

Eso es. No se requieren contorsiones externas, reescritura de URL propensas a errores ni servidores proxy basados ​​en reglas.

Disfruten, compañeros superusuarios.

Cecil Curry
fuente
Me alegra escuchar que al menos una persona lea mi respuesta a fondo. Y gracias por su posterior análisis y la solución httrack. +1
mpy
1
La solución httrack fue perfecta, ¡muchas gracias!
ChrisChinchilla
Me alegra ser de poca ayuda, muchachos. Dado lo terriblemente espantoso que iba a deshacerse este tapiz de aflicción y engaño, solo tuve que compartir mis hallazgos.
Cecil Curry
Para eliminar el límite de transferencia de velocidad, agregue estos parámetros: --disable-security-limits --max-rate = 0
Oswaldo
7

Desafortunadamente, ninguna de las respuestas pudo resolver el problema de hacer un espejo completo desde un sitio web archivado (sin duplicar cada archivo una docena de veces). Así que pirateé otro enfoque. Hackeado es la palabra importante ya que mi solución no es una solución general ni muy simple (leer: copiar y pegar). Utilicé el Servidor Proxy Privoxy para reescribir los archivos sobre la marcha mientras reflejaba con wget.

Pero primero, ¿qué es tan difícil de duplicar desde la 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 recursión no demasiado pequeña. Pero no quiero que wget rastree todo el servidor. Por lo general, utiliza la opción sin padre-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). Omitir -npterminará arrastrándose (...)http://cst-www.nrl.navy.mily finalmente recuperará todo el navi.milsitio. ¡Definitivamente no quiero eso! Entonces, este filtro intenta emular el -npcomportamiento con la máquina 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

Lo dejaré como un ejercicio para profundizar en la sintaxis. Lo que hace este filtro es la siguiente: Sustituye a todas las URL Wayback como http://web.archive.org/web/20110801041529/http://www.nrl.navy.mil/con http://some.local.server/404el tiempo ya que no contienen http://cst-www.nrl.navy.mil/lattice/.

Tienes que ajustarte http://some.local.server/404. Esto es para enviar un error 404 a wget. Probablemente Privoxy puede hacer eso 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 es necesario para ajustar ambas ocurrencias de http://cst-www.nrl.navy.mil/lattice/reflejar el sitio que desea espejo.

Problema 3 + Solución

Y, por último, alguna versión archivada de una página podría vincularse a la 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á terminar hasta que haya obtenido todas las instantáneas. ¡Realmente no quiero eso, tampoco! Aquí ayuda mucho, que la máquina Wayback es 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 20110801041529instantánea. Te redirige automáticamente a la correcta:

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 encerrado /.../se reemplaza por 20120713212803(ajústelo a la instantánea más reciente de su sitio deseado). Esto podría ser un problema si hay tales números en la estructura del sitio que no se originan en la máquina Wayback. No es perfecto, pero está bien para el sitio Strukturtypen .

Lo bueno de eso es que wget ignora la nueva ubicación a la que se redirige y guarda el archivo, en el examen 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.actionvia

{ +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

Usé estas opciones, pero también -mdebería funcionar. Terminarás con las carpetas

20120713212803
20120713212803cs_
20120713212803im_
20120713212803js_

a medida que la máquina Wayback separa imágenes ( im_), hojas de estilo ( cs_) etc. Combiné todo y usé algo de magia sed para reemplazar los enlaces relativos feos ( ../../../../20120713212803js_/http:/cst-www.nrl.navy.mil/lattice) en consecuencia. Pero esto no es realmente necesario.

mpy
fuente
1
Esta fue una respuesta invaluable. Su disección precisa de la estructura interna del sitio de The Wayback Machine fue clave para la solución basada en httrack que finalmente encontré. Tu rock, mpy.
Cecil Curry
5

wget

- página-requisitos
Esta opción hace que Wget descargue todos los archivos necesarios para mostrar correctamente una página HTML dada. Esto incluye cosas como imágenes en línea, sonidos y hojas de estilo referenciadas.

Normalmente, al descargar una sola página HTML, no se descargan los documentos necesarios que puedan ser necesarios para mostrarla correctamente. El uso de -r junto con -l puede ayudar, pero como Wget no suele distinguir entre documentos externos e integrados, generalmente se deja uno con "documentos de hoja" que no cumplen 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 está vinculada a 3.html. Digamos que esto continúa hasta un número arbitrariamente alto.

-m
--mirror

Active las opciones adecuadas para duplicar. Esta opción activa la recursión y el sellado de tiempo, establece una profundidad de recursión 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>

Así 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 firefoxextensiónscrapbook

á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 ligereza, velocidad, precisión y soporte multilingüe. 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 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 parece a las Notas de Opera

Cómo duplicar un sitio
Instalar un bloc de notas y reiniciar firefox

  1. Cargar página en el navegador [página web a duplicar]
  2. Haga clic derecho en la página -> Guardar página como ...
  3. seleccione el nivel de Guardar en profundidad y presione guardar ingrese la descripción de la imagen aquí
  4. seleccionar Restrict to Drirectory/ Domaindel filtro
    ingrese la descripción de la imagen aquí

Espere a que se refleje para completar. Después de duplicar, puede acceder al sitio web sin conexión desde el ScrapBookmenú.

Prinz
fuente
Aunque Scrapbook no logró capturar el sitio por completo, estaba más cerca de una posible solución que las otras sugerencias. Especialmente su opción Filtrar por cadena ... fue más útil que filtrar por host / dominio. Por lo tanto, te :)
otorgo
0

Tenga cuidado con el siguiente comando porque toma mucho. El 1 después de la 'l' le dice que tome todas las páginas de enlaces en el sitio que tengan 1 nivel de profundidad. Si desea que la araña sea más profunda, cambie esto a 2, pero puede que nunca termine porque podría quedar atrapado en un bucle.

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

No estoy seguro de qué partes del sitio desea conservar y qué partes no le interesan, pero probablemente debería incluir en una lista blanca o lista negra las diferentes partes del sitio para obtener solo lo que desea y evitar descargando todo archive.org o internet.

Use -D www.examle.com,www.another.example.compara incluir en la lista blanca solo los dominios que desee o use --exclude-domains www.examle.com,www.another.example.com para incluir en la lista negra lo que no desea.

Michael Yasumoto
fuente
Gracias, pero el problema con las listas blancas / negras es que todos los sitios web archivados provienen del web.archive.orghost. Quiero reflejar todo lo wget -npque habría reflejado una vez que el sitio original todavía estuviera en línea. -ltampoco ayuda mucho, ya que tiene que incrementarse a 3 o 4, por lo que resulta en ascender demasiado la jerarquía del sitio web.
mpy
0

El formato de las URL para el Archivo de Internet incluye la fecha y hora en que se archivó el sitio. Para ahorrar espacio, los activos que no han cambiado están vinculados a una versión anterior de un sitio.

Por ejemplo, en esta url http://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 lo http://web.archive.org/web/20110722080716/http://cst-www.nrl.navy.mil/lattice/que necesita, comience por eso, pero también tome todos los activos vinculados http://web.archive.org/web/*/http://cst-www.nrl.navy.mil/lattice/.

Brian
fuente
Exactamente, y ese es el problema. Digamos que la página A enlaza con B. Por lo tanto, la versión actual A enlaza con la versión anterior B. Pero B también incluye un enlace con A. Entonces, la versión anterior de A también se recupera y vuelve a enlazar con la versión anterior. Esto (a una profundidad de rastreo (necesaria) de 4) conduce al resultado, que termina con docenas de versiones de la página de índice, pero no todos los archivos necesarios.
mpy
0

Ya existe una herramienta que lo hace mejor:

wayback_machine_downloader domain.org 

Para obtenerlo, debes tener instalado Ruby. Y entonces:

gem install wayback_machine_downloader
Eduard Florinescu
fuente