Oto skrypt na początek:
#!/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
Spowoduje to zrzucenie wszystkich łączy do pliku, który możesz dalej przetwarzać w zależności od tego, czego szukasz. Można dodać dodatkowy kod do filtrowania i przetwarzania danych wyjściowych, jednak bez wiedzy, czego potrzebujesz, będziesz musiał nad nim popracować lub zadać dodatkowe pytania.
Aby wyczyścić dane wyjściowe , użyj następującego przykładu:
Przy użyciu „ https://www.google.com ” jako jednego z adresów URL dane wyjściowe wyglądałyby tak:
$ 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
Obciąłem dane wyjściowe, w rzeczywistości jest 19 adresów URL linków.
Aby wynik był tylko listą adresów URL, bez liczb lub białych znaków itp., Użyj awkalbo w połączeniu z, lynxalbo później.
$ 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
Jeśli więc chcesz, aby plik wyjściowy był tylko adresem URL łącza, zmień lynxwiersz polecenia na:
lynx -dump -listonly "$url" | awk '/:/{print $2}' >> "$output"
Zawsze możesz przetworzyć zawartość pliku wyjściowego później w skrypcie lub później, aby sprowadzić go do naprawdę pożądanych adresów URL linków i użyć innego parametru wyszukiwania w awk, np. Użyłem „:”, aby wyeliminować puste linie na lynx wyjściu i aby pokazać przykład, w jaki sposób można go filtrować. W tym przykładzie tylko adresy URL linków są przekierowywane do pliku wyjściowego , ponieważ tylko wiersze zawierające dane :wyjściowe get awk, ponieważ wszystkie adresy URL powinny zawierać dwukropek. {print $2}, Uproszczone w tym wyjaśnieniem, usuwa wszystko na lewo od rzeczywistego URL Link.
Oto zaktualizowany skrypt, który sortuje i usuwa zduplikowane adresy URL linków:
#!/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
Aktualizacja przechwycić stderr wyjście z lynxdo pliku:
Aby przechwycić stderr wyjście z lynxdo pliku przekierować stderrdo pliku na dysku, np 2>>"$file"dodanej po "$url", na przykład:
lynx -dump -listonly "$url" 2>>"$file" >> "$output"
Dodaj errlog="/path/to/Lynx_Errors.txt"pod, output="/path/to/Output_Link_URLs.txt"a następnie zmień lynxwiersz poleceń na, np .:
lynx -dump -listonly "$url" 2>>"$errlog" >> "$output"
Lub:
lynx -dump -listonly "$url" 2>>"$errlog" | awk '/:/{print $2}' | sort | uniq >> "$output"
Przykład:
#!/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