mac - wget ubuntu
¿Por qué wget solo descarga el index.html para algunos sitios web? (7)
Estoy tratando de usar el comando wget:
wget -p http://www.example.com
para recuperar todos los archivos en la página principal. Para algunos sitios web funciona, pero en la mayoría de los casos, solo descarga el archivo index.html. He intentado el comando wget -r pero no funciona. ¿Alguien sabe cómo obtener todos los archivos en una página o simplemente darme una lista de los archivos y las URL correspondientes en la página?
El enlace que ha proporcionado es la página de inicio o /index.html, por lo tanto, está claro que solo obtiene una página index.html. Para una descarga real, por ejemplo, para el archivo "test.zip", debe agregar el nombre exacto del archivo al final. Por ejemplo, use el siguiente enlace para descargar el archivo test.zip:
wget -p domainname.com/test.zip
Descargar un sitio web completo utilizando wget --mirror
A continuación se muestra la línea de comandos que desea ejecutar cuando desea descargar un sitio web completo y está disponible para la visualización local.
wget --mirror -p --convert-links -P ./LOCAL-DIR http://www.example.com
–Mirror: activa las opciones adecuadas para reflejar.
-p: descarga todos los archivos necesarios para mostrar correctamente una página HTML determinada.
–Convertir enlaces: después de la descarga, convierta los enlaces en un documento para verlos localmente.
-P ./LOCAL-DIR: guarda todos los archivos y directorios en el directorio especificado
Descarga solo ciertos tipos de archivos usando wget -r -A
Puedes usar esto bajo las siguientes situaciones:
Descarga todas las imágenes de un sitio web,
Descarga todos los videos de un sitio web,
- Descargar todos los archivos PDF de un sitio web
wget -r -A.pdf http://example.com/test.pdf
En primer lugar, para aclarar la pregunta, el objetivo es descargar index.html
más todas las partes necesarias de esa página (imágenes, etc.). La opción -p
es equivalente a --page-requisites
.
La razón por la que los requisitos de la página no siempre se descargan es que a menudo se alojan en un dominio diferente de la página original (una CDN, por ejemplo). De forma predeterminada, wget se niega a visitar otros hosts , por lo que necesita habilitar la --span-hosts
opción --span-hosts
.
wget --page-requisites --span-hosts ''http://www.amazon.com/''
Si necesita poder cargar index.html
y tener todos los requisitos de página cargados desde la versión local, deberá agregar la opción --convert-links
, para que las URLs en los atributos img
src (por ejemplo) se vuelvan a escribir a las URL relativas que apuntan a las versiones locales.
Opcionalmente, es posible que también desee guardar todos los archivos en un solo directorio "host" agregando la --no-host-directories
, o guardar todos los archivos en un solo directorio plano agregando la --no-directories
.
El uso de --no-directories
dará como resultado que se descarguen muchos archivos en el directorio actual, por lo que probablemente desee especificar un nombre de carpeta para los archivos de salida, utilizando --directory-prefix
.
wget --page-requisites --span-hosts --convert-links --no-directories --directory-prefix=output ''http://www.amazon.com/''
Otro problema podría ser que el sitio que está duplicando utiliza enlaces sin www
. Así que si especificas
wget -p -r http://www.example.com
no descargará ninguna página vinculada (interna) porque son de un dominio "diferente". Si este es el caso entonces use
wget -p -r http://example.com
en su lugar (sin www
).
Sé que este hilo es antiguo, pero prueba lo que menciona Ritesh con:
--no galletas
¡Funcionó para mí!
Si busca index.html
en el manual de wget , puede encontrar una opción --default-page=name
que es index.html
por defecto. Puede cambiar a index.php
por ejemplo.
--default-page=index.php
Si solo obtiene el archivo index.html
y parece que el archivo solo contiene datos binarios (es decir, no hay texto legible, solo caracteres de control), entonces el sitio probablemente esté enviando los datos mediante la compresión gzip
.
Puede confirmar esto ejecutando cat index.html | gunzip
cat index.html | gunzip
para ver si genera HTML legible.
Si este es el caso, entonces la característica recursiva de wget
( -r
) no funcionará. Hay un patch para que wget
funcione con datos comprimidos con gzip, pero aún no parece estar en la versión estándar.
Wget también puede descargar un sitio web completo. Pero como esto puede suponer una gran carga para el servidor, wget obedecerá el archivo robots.txt.
wget -r -p http://www.example.com
El parámetro -p le dice a wget que incluya todos los archivos, incluidas las imágenes. Esto significará que todos los archivos HTML se verán como deberían hacerlo.
Entonces, ¿qué pasa si no quieres que Wget obedezca con el archivo robots.txt? Simplemente puede agregar -e robots = off al comando de esta manera:
wget -r -p -e robots=off http://www.example.com
Como muchos sitios no le permitirán descargar todo el sitio, verificarán la identidad de su navegador. Para solucionar esto, use -U mozilla como expliqué anteriormente.
wget -r -p -e robots=off -U mozilla http://www.example.com
A muchos de los propietarios de sitios web no les gustará el hecho de que esté descargando todo el sitio. Si el servidor ve que está descargando una gran cantidad de archivos, puede agregarlo automáticamente a su lista negra. La forma de evitar esto es esperar unos segundos después de cada descarga. La forma de hacerlo utilizando wget es incluir --wait = X (donde X es la cantidad de segundos).
también puede usar el parámetro: --random-wait para permitir que wget elija un número aleatorio de segundos para esperar. Para incluir esto en el comando:
wget --random-wait -r -p -e robots=off -U mozilla http://www.example.com