Guarde una sola página web (con imágenes de fondo) con Wget

73

Quiero usar Wget para guardar páginas web individuales (no recursivamente, no sitios completos) como referencia. Al igual que la "Página web completa de Firefox".

Mi primer problema es: no puedo hacer que Wget guarde las imágenes de fondo especificadas en el CSS. Incluso si guardara los archivos de imagen de fondo, no creo que --convert-links convertiría las URL de imagen de fondo en el archivo CSS para apuntar a las imágenes de fondo guardadas localmente. Firefox tiene el mismo problema.

Mi segundo problema es: si hay imágenes en la página que quiero guardar que están alojadas en otro servidor (como anuncios), estas no se incluirán. --span-hosts no parece resolver ese problema con la siguiente línea.

Estoy usando: wget --no-parent --timestamping --convert-links --page-requisites --no-directories --no-host-directories -erobots=off http://domain.tld/webpage.html

usuario14124
fuente
1
exactamente la misma línea (wget --no-parent - timestamping --convert-links --page-requisitos --no-directorios --no-host-directorios -erobots = off domain.tld) ​​en realidad guarda imágenes de fondo referenciadas desde CSS después de actualizar a 1.12. El manual dice: "Con las URL http, Wget recupera y analiza el html o css de la url dada, recuperando los archivos a los que se refiere el documento, mediante marcas como href o src, o valores css uri especificados usando la función 'url ()' notación." El segundo problema aún debe resolverse
user14124

Respuestas:

106

Desde la página de manual de Wget :

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://www.example.com/

También en caso de robots.txtque no esté permitido agregar-e robots=off

vvo
fuente
Parece que solo está reescribiendo js y css en urls absolutas
Greg Dean
1
no importa, fue robots.txt no permitiéndome actualizar la respuesta con la solución alternativa
Greg Dean
19
Ampliado:wget --adjust-extension --span-hosts --convert-links --backup-converted --page-requisites [url]
sam
44
O mejor aún wget --recursive --no-clobber --page-requisites --html-extension --convert-links --restrict-file-names=windows[url]
Petah
@ {etah: probé su comando con sus argumentos, descargará otras páginas web además de la especificada.
Tim
7

El wgetcomando ofrece la opción --mirror, que hace lo mismo que:

$ wget -r -N -l inf --no-remove-listing

También puede participar -xpara crear una jerarquía de directorios completa para el sitio, incluido el nombre de host.

wgetSin embargo, es posible que no haya podido encontrar esto si no está utilizando la versión más reciente de .

Ernie Dunbar
fuente
1
Esto probablemente rastreará todo el sitio web con sus sub-urls
4253wyerg4e
2

Parece que wgetFirefox no analiza el CSS para que los enlaces incluyan esos archivos en la descarga. Podrías evitar esas limitaciones haciendo lo que puedas y creando una secuencia de comandos para extraer el enlace de cualquier CSS o Javascript en los archivos descargados para generar una lista de los archivos que te perdiste. Luego, una segunda ejecución de wgetesa lista de enlaces podría capturar lo que se perdió (use la -ibandera para especificar un URL de listado de archivos).

Si te gusta Perl, hay un módulo CSS :: Parser en CPAN que puede darte un medio fácil para extraer enlaces de esta manera.

Tenga en cuenta que wgetsolo se analiza cierto marcado html ( href/ src) y css uris ( url()) para determinar qué requisitos de página se deben obtener. Puede intentar usar complementos de Firefox como DOM Inspector o Firebug para determinar si las imágenes de terceros que no está obteniendo se agregan a través de Javascript; de ser así, deberá recurrir a un script o complemento de Firefox para obtenerlas. también.

quijote curandero
fuente
Como dije en el comentario de mi primera publicación, parece que se ha solucionado en v1.12. Sin embargo, todavía no sé cómo incluir imágenes que están en otros servidores.
user14124
sí, analizar el CSS es nuevo en wget v1.12, está en la parte superior del registro de cambios: freshmeat.net/urls/376000c9c7a02f7a3592180c2390ff04
quack quixote
Intente agregar la opción -H a la lista. Significa --span-hosts y permite la descarga de contenido desde hosts externos.
Michael