#!/bin/bash
# Uso: crawler.sh --url <url-del-sitemap> --threads <número-de-hilos>
USER_AGENT="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36"
# Función para procesar cada URL y mostrar el código de estado HTTP
process_url() {
local url=$1
local http_status=$(curl -o /dev/null -s -w "%{http_code}\n" -A "$USER_AGENT" "$url")
echo "URL: $url - Código HTTP: $http_status"
}
# Función para procesar el sitemap
process_sitemap() {
local sitemap_url=$1
local threads=$2
local temp_file=$(mktemp)
# Descargar el sitemap
curl -s -A "$USER_AGENT" "$sitemap_url" -o "$temp_file"
# Extraer URLs
grep -oP '<loc>(.*?)</loc>' "$temp_file" | sed -e 's/<\/*loc>//g' | xargs -n 1 -P "$threads" -I {} bash -c "
process_url() {
local url=\$1
local http_status=\$(curl -o /dev/null -s -w \"%{http_code}\n\" -A \"$USER_AGENT\" \"\$url\")
echo \"URL: \$url - Código HTTP: \$http_status\"
}
process_url '{}'
"
# Limpiar archivo temporal
rm "$temp_file"
}
# Parsear argumentos
while [[ "$#" -gt 0 ]]; do
case $1 in
--url) sitemap_url="$2"; shift ;;
--threads) threads="$2"; shift ;;
*) echo "Opción desconocida: $1" ;;
esac
shift
done
# Verificar si se han dado los argumentos necesarios
if [[ -z "$sitemap_url" || -z "$threads" ]]; then
echo "Faltan argumentos. Uso: crawler.sh --url <url> --threads <número>"
exit 1
fi
# Llamar a la función principal
process_sitemap "$sitemap_url" "$threads"