Voici un script pour vous aider à démarrer:
#!/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
Cela va vider tous les liens dans un fichier que vous pouvez traiter en fonction de ce que vous recherchez. Du code supplémentaire pourrait être ajouté pour filtrer et traiter la sortie. Toutefois, sans savoir de quoi vous avez besoin, vous devrez travailler dessus et poser des questions supplémentaires.
Pour nettoyer la sortie , utilisez l'exemple suivant:
En utilisant " https://www.google.com " comme une des URL, le résultat devrait ressembler à ceci:
$ 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
J'ai tronqué la sortie, il y a en fait 19 URL de liens.
Pour que la sortie soit simplement une liste d'URL, sans chiffres ni espaces, etc., utilisez- awk
les conjointement lynx
ou ultérieurement.
$ 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
Donc, si vous voulez que le fichier de sortie ne soit que les URL de lien, modifiez la lynx
ligne de commande pour:
lynx -dump -listonly "$url" | awk '/:/{print $2}' >> "$output"
Vous pouvez toujours traiter le contenu du fichier de sortie plus tard dans le script ou ultérieurement pour le réduire aux URL de lien réellement recherchées et utiliser un paramètre de recherche différent dans awk
, par exemple, j'ai utilisé ":" pour éliminer à la fois les lignes vides dans la lynx
sortie. et pour montrer un exemple de la façon dont il peut être filtré. Dans cet exemple, seules les URL de lien sont redirigées dans le fichier de sortie car seules les lignes contenant une :
sortie en obtiennent awk
, car toutes les URL doivent comporter un signe deux-points. Le {print $2}
, simplifié dans cette explication, supprime tout ce qui se trouve à gauche de l'URL de lien réelle.
Voici un script mis à jour qui trie et supprime les URL de lien en double:
#!/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
Mise à jour pour capturer la stderr
sortie d' lynx
un fichier:
Pour capturer la stderr
sortie d' lynx
un fichier, redirigez-le stderr
vers un fichier sur disque, par exemple, 2>>"$file"
ajouté après "$url"
, par exemple:
lynx -dump -listonly "$url" 2>>"$file" >> "$output"
Ajouter en- errlog="/path/to/Lynx_Errors.txt"
dessous output="/path/to/Output_Link_URLs.txt"
et changer la lynx
ligne de commande en, par exemple:
lynx -dump -listonly "$url" 2>>"$errlog" >> "$output"
Ou:
lynx -dump -listonly "$url" 2>>"$errlog" | awk '/:/{print $2}' | sort | uniq >> "$output"
Exemple:
#!/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