Archivo de sitios web

Recientemente me sumergí profundamente en el tema del archivo de sitios web. Me preguntaron amigos que tenían miedo de perder el control de su trabajo en Internet debido a una mala administración del sistema o una eliminación hostil. Dichas amenazas hacen que el archivo de sitios web sea una herramienta importante para cualquier administrador del sistema. Al final resultó que, algunos sitios son mucho más difíciles de archivar que otros. Este artículo demuestra el proceso de archivar sitios web tradicionales y muestra cómo no funciona en aplicaciones modernas de una sola página que avivan la web moderna.

Convertir sitios simples


Los días ya pasaron cuando los sitios web se escribieron manualmente en HTML. Ahora son dinámicos y se construyen sobre la marcha utilizando los últimos marcos JavaScript, PHP o Python. Como resultado, los sitios se han vuelto más frágiles: los bloqueos de la base de datos, las actualizaciones falsas o las vulnerabilidades pueden provocar la pérdida de datos. En mi vida anterior como desarrollador web, tuve que aceptar la idea: los clientes esperan que los sitios web funcionen para siempre. Esta expectativa no encaja bien con el principio del desarrollo web "moverse rápido y romper cosas". Trabajar con el sistema de administración de contenido Drupal resultó ser especialmente difícil en este sentido, ya que las actualizaciones grandes violan intencionalmente la compatibilidad con módulos de terceros, lo que implica un proceso de actualización costoso que los clientes rara vez pueden permitirse. La solución fue archivar estos sitios: tome un sitio web dinámico y dinámico, y conviértalo en simples archivos HTML que cualquier servidor web pueda entregar para siempre. Este proceso es útil para sus propios sitios dinámicos, así como para sitios de terceros que están fuera de su control y que desea proteger.

Los sitios simples o estáticos son manejados por el venerable Wget . Aunque necesitas un hechizo real para reflejar todo el sitio:

$ 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/ 

Este comando carga el contenido de la página web y también rastrea todos los enlaces en los dominios especificados. Antes de comenzar esta acción en su sitio favorito, considere las posibles consecuencias del rastreo. El comando anterior ignora intencionalmente las reglas de robots.txt , como ahora es habitual para los archiveros , y descarga el sitio a la máxima velocidad. La mayoría de los rastreadores tienen opciones para pausar entre llamadas y límites de ancho de banda para no crear una carga excesiva en el sitio de destino.

Este comando también recibe "detalles de la página", es decir, hojas de estilo (CSS), imágenes y scripts. El contenido cargado de la página cambia para que los enlaces apunten a una copia local. El conjunto de archivos resultante se puede alojar en cualquier servidor web, lo que representa una copia estática del sitio web original.

Pero esto es cuando todo va bien. Cualquiera que haya trabajado con una computadora sabe que las cosas rara vez salen según el plan: hay muchas formas interesantes de interrumpir el procedimiento. Por ejemplo, hace algún tiempo estaba de moda poner bloques con un calendario en los sitios. CMS los generará sobre la marcha y enviará a los rastreadores a un ciclo interminable, tratando de obtener más y más páginas nuevas. Los archiveros difíciles pueden usar expresiones regulares (por ejemplo, Wget tiene la opción --reject-regex ) para ignorar los recursos problemáticos. Otra opción: si la interfaz de administración del sitio web está disponible, desactive calendarios, formularios de inicio de sesión, formularios de comentarios y otras áreas dinámicas. Tan pronto como el sitio se vuelva estático, dejarán de funcionar de todos modos, por lo que tiene sentido eliminar este desastre del sitio original.

Pesadilla JavaScript


Desafortunadamente, algunos sitios web son mucho más que HTML. Por ejemplo, en sitios de una sola página, el navegador web crea contenido ejecutando un pequeño programa JavaScript. Un agente de usuario simple como Wget intentará sin éxito restaurar una copia estática significativa de estos sitios, ya que no admite JavaScript en absoluto. Teóricamente, los sitios deberían admitir mejoras progresivas para que el contenido y la funcionalidad sean accesibles sin JavaScript, pero estas directivas rara vez se siguen, como lo confirmará cualquiera que use complementos como NoScript o uMatrix .

Los métodos de archivo tradicionales a veces fallan de la manera más estúpida. Cuando intenté hacer una copia de seguridad de un periódico local, descubrí que WordPress agrega cadenas de consulta (por ejemplo ?ver=1.12.4 ) al final de la inclusión. Esto es confuso para la detección de tipo de contenido en servidores web que sirven el archivo porque dependen de la extensión del archivo para producir el encabezado de Content-Type correcto. Cuando dicho archivo se descarga al navegador, no puede cargar scripts, lo que rompe los sitios web dinámicos.

A medida que el navegador se convierte gradualmente en una máquina virtual para ejecutar código arbitrario, se deben adaptar los métodos de archivo basados ​​en análisis HTML puro. La solución a estos problemas es grabar (y reproducir) los encabezados HTTP entregados por el servidor durante el rastreo, y los archiveros verdaderamente profesionales utilizan este enfoque.

Crear y mostrar archivos WARC


En el archivo de Internet, Brewster Calais y Mike Burner desarrollaron el formato ARC (ARChive) en 1996: una forma de combinar millones de archivos pequeños creados durante el archivo. Al final, el formato se estandarizó como una especificación WARC (Web ARChive), lanzado como un estándar ISO en 2009 y revisado en 2017. Esfuerzos de estandarización liderados por el Consorcio Internacional de Conservación (IIPC). Según Wikipedia, es "una organización internacional de bibliotecas y otras organizaciones creadas para coordinar esfuerzos para preservar el contenido de Internet para el futuro", e incluye miembros como la Biblioteca del Congreso y el Archivo de Internet. Este último usa el formato WARC en su rastreador Heritrix Java.

Un archivo WARC combina varios recursos en un archivo comprimido, como encabezados HTTP, contenido de archivos y otros metadatos. Convenientemente, este formato también es compatible con el rastreador Wget con la --warc . Desafortunadamente, los navegadores no pueden mostrar directamente los archivos WARC, por lo que se requiere un visor especial para acceder al archivo. O tienes que convertirlo. El visor más simple que encontré es pywb , un paquete de Python. Lanza un servidor web simple con una interfaz como Wayback Machine para ver el contenido de los archivos WARC. El siguiente conjunto de comandos asignará el archivo WARC a http://localhost:8080/ :

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

Por cierto, los desarrolladores del servicio Webrecorder crearon esta herramienta, que guarda el contenido dinámico de la página usando un navegador.

Desafortunadamente, pywb no puede cargar archivos WARC generados por Wget porque obedece los requisitos incorrectos de la especificación WARC 1.0 , que se solucionaron en la versión 1.1 . Hasta que Wget o pywb solucionen estos problemas, los archivos WARC creados por Wget no son lo suficientemente confiables, así que personalmente comencé a buscar otras alternativas. Me llamó la atención el rastreador bajo el simple nombre de rastreo . Así es como comienza:

  $ crawl https://example.com/ 

El programa admite algunos parámetros de línea de comandos, pero la mayoría de los valores predeterminados son bastante funcionales: descarga recursos como CSS e imágenes de otros dominios (si no se especifica el indicador -exclude-related ), pero la recursión no irá más allá del host especificado. Por defecto, se inician diez conexiones simultáneas: este parámetro se cambia con el indicador -c . Pero lo más importante, los archivos WARC resultantes se cargan bien en pywb.

Trabajo futuro y alternativas


Hay muchos recursos para usar archivos WARC. En particular, hay un Wget de reemplazo llamado Wpull , diseñado específicamente para archivar sitios web. Tiene soporte experimental para PhantomJS e integración con youtube-dl , lo que le permitirá descargar sitios JavaScript más complejos y descargar medios de transmisión, respectivamente. El programa es la base de la herramienta de archivo ArchiveBot , que está siendo desarrollada por el "equipo gratuito de archiveros, programadores, escritores y conversadores traviesos" de ArchiveTeam en un intento de "salvar la historia antes de que desaparezca para siempre". Parece que la integración de PhantomJS no es tan buena como nos gustaría, por lo que ArchiveTeam usa un montón de otras herramientas para reflejar sitios más complejos. Por ejemplo, snscrape escanea los perfiles de las redes sociales y genera listas de páginas para enviar a ArchiveBot. Otra herramienta es crocoite , que ejecuta Chrome en modo sin cabeza para archivar sitios con mucho JavaScript.

Este artículo estaría incompleto sin mencionar los "sitios Xerox" de HTTrack . Al igual que Wget, el programa HTTrack crea copias locales de sitios, pero, desafortunadamente, no admite guardar en WARC. Las características interactivas pueden ser más interesantes para los usuarios novatos que no estén familiarizados con la línea de comandos.

En el mismo sentido, durante mi investigación encontré una alternativa a Wget llamada Wget2 con soporte para trabajo de subprocesos múltiples, que acelera el programa. Sin embargo, algunas características de Wget faltan aquí, incluidas las plantillas, guardar en WARC y soporte FTP, pero se ha agregado soporte RSS, almacenamiento en caché DNS y soporte TLS mejorado.

Finalmente, mi sueño personal para tales herramientas sería integrarlas con mi sistema de marcadores existente. Actualmente almaceno enlaces interesantes en Wallabag , un servicio de almacenamiento local para páginas interesantes, desarrollado como una alternativa al programa gratuito Pocket (ahora propiedad de Mozilla). Pero Wallabag en su diseño solo crea una versión "legible" del artículo en lugar de una copia completa. En algunos casos, la "versión legible" es realmente ilegible , y Wallabag a veces no puede manejar el análisis . En cambio, otras herramientas, como archivador de marcadores o reminiscencia , guardan una captura de pantalla de la página junto con HTML completo, pero, desafortunadamente, no admiten el formato WARC, que proporcionaría una reproducción aún más precisa.

La triste verdad de mi duplicación y archivo es que los datos están muriendo. Afortunadamente, los archiveros aficionados tienen a su disposición las herramientas para guardar contenido interesante en Internet. Para aquellos que no quieren hacer esto por su cuenta, hay un archivo de Internet, así como el grupo ArchiveTeam, que está trabajando en la creación de una copia de seguridad del archivo de Internet .

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


All Articles