Aquí hay un script para empezar:
#!/bin/bash
urls="/path/to/Input_URLs_List.txt"
output="/path/to/Output_Link_URLs.txt"
n="$(awk 'END {print NR}' "$urls")"
echo "Processing $n URLs..."
cat "$urls" | \
while read url; do
lynx -dump -listonly "$url" >> "$output"
sleep 5
n=$((n-1))
echo "$n URLs left to process..."
done
Esto volcará todos los enlaces en un archivo que podrás procesar posteriormente en función de lo que busques. Más información en código podría añadirse para filtrar y procesar la salida, sin embargo, sin saber qué es lo que necesitas tendrás que trabajar en ello o hacer algunas preguntas adicionales.
Para limpiar el salida Utiliza lo siguiente como ejemplo:
Usando " https://www.google.com " como una de las URLs que el salida se vería así:
$ lynx -dump -listonly "https://www.google.com"
References
1. https://www.google.com/imghp?hl=en&tab=wi
2. https://maps.google.com/maps?hl=en&tab=wl
3. https://play.google.com/?hl=en&tab=w8
4. https://www.youtube.com/?tab=w1
He truncado la salida, en realidad hay 19 URLs de enlaces.
Para tener la salida sea sólo una lista de URLs, sin números ni espacios en blanco, etc., utilice awk
ya sea en conjunto con lynx
o después.
$ lynx -dump -listonly "https://www.google.com" | awk '/:/{print $2}'
https://www.google.com/imghp?hl=en&tab=wi
https://maps.google.com/maps?hl=en&tab=wl
https://play.google.com/?hl=en&tab=w8
https://www.youtube.com/?tab=w1
Así que si quieres el salida para que sean sólo las URL de los enlaces, cambie el lynx
en la línea de comandos:
lynx -dump -listonly "$url" | awk '/:/{print $2}' >> "$output"
Siempre se puede procesar el contenido del salida archivo más adelante en el script o después para reducirlo a las URLs de enlaces realmente deseadas y utilizar un parámetro de búsqueda diferente en awk
Por ejemplo, he utilizado ":" para eliminar las líneas en blanco en el lynx
salida y mostrar un ejemplo de cómo se puede filtrar. En este ejemplo sólo las URLs de enlaces son redirigidas al salida porque sólo las líneas que contienen un :
obtener la salida por awk
ya que todas las URLs deben llevar dos puntos. La dirección {print $2}
, simplificado en esta explicación, elimina todo lo que está a la izquierda de la URL real del enlace.
Aquí hay una actualización script que clasifica y elimina las URL de enlaces duplicados:
#!/bin/bash
urls="/path/to/Input_URLs_List.txt"
output="/path/to/Output_Link_URLs.txt"
n="$(awk 'END {print NR}' "$urls")"
echo "Processing $n URLs..."
cat "$urls" | \
while read url; do
lynx -dump -listonly "$url" | awk '/:/{print $2}' | sort | uniq >> "$output"
sleep 5
n=$((n-1))
[[ $n -gt 0 ]] && echo "$n URLs left to process..." || echo "Processing Completed!"
done
Actualizar para capturar stderr
salida de lynx
a un archivo:
Para captar stderr
salida de lynx
a un archivo, redirigir stderr
a un archivo de disco, por ejemplo, 2>>"$file"
añadido después de "$url"
Por ejemplo:
lynx -dump -listonly "$url" 2>>"$file" >> "$output"
Añadir errlog="/path/to/Lynx_Errors.txt"
en output="/path/to/Output_Link_URLs.txt"
y luego cambiar el lynx
en la línea de comandos, por ejemplo
lynx -dump -listonly "$url" 2>>"$errlog" >> "$output"
O:
lynx -dump -listonly "$url" 2>>"$errlog" | awk '/:/{print $2}' | sort | uniq >> "$output"
Ejemplo:
#!/bin/bash
urls="/path/to/Input_URLs_List.txt"
output="/path/to/Output_Link_URLs.txt"
errlog="/path/to/Lynx_Errors.txt"
n="$(awk 'END {print NR}' "$urls")"
echo "Processing $n URLs..."
cat "$urls" | \
while read url; do
lynx -dump -listonly "$url" 2>>"$errlog" | awk '/:/{print $2}' | sort | uniq >> "$output"
sleep 5
n=$((n-1))
[[ $n -gt 0 ]] && echo "$n URLs left to process..." || echo "Processing Completed!"
done
0 votos
De hecho ya tengo instalado lynx vía Homebrew.
0 votos
De acuerdo entonces. IMO escribir un bash script usando lynx para obtener los enlaces de la lista de URL's es el camino a seguir. Con las URLs de destino en un archivo de texto, uno por línea, el archivo puede ser leído en una línea a la vez y procesado en un bucle con un temporizador para no golpear el servidor demasiado rápido si las URLs están apuntando al mismo dominio y o simplemente para el ritmo de las cosas adecuadamente. Toda la salida se pone en otro archivo para ser filtrada como sea necesario para llegar a la lista de URLs deseadas. ¿Necesita ayuda con el script?
0 votos
Sí, sería genial si pudieras. Estoy empezando a aprender bash pero soy muy novato. Tengo las URLs en un archivo de texto plano una por línea. Sólo que no estoy seguro de dónde ir desde allí.