rss feed articles activities all_comments

indeedgeek.de

Florian Eitel

Massendownload

Wie oft steht man vor einem Problem wie es simpler nicht sein könnte? Doch weil man eine besonders elegante Lösung möchte verrenkt man sich dabei beide Arme… So erging es mir gestern wieder. Mein Gedanke war aus einem Directory-Index, wie er von jedem Webserver generiert wird, alle Dateien auszulesen und herunter zu laden. Das Ergebnis sollte allerdings möglichst kurz sein und in nur einem Befehl, ohne irgendwelche Hilfsdateien anlegen zu müssen, abgeschlossen sein.

Nach stundenlangen Versuchen mit sed habe ich nun endlich heute eine Lösung gefunden mit der ich leben kann:


wget -qO- $PARAM | ruby -e "STDIN.each_line{|line|
  file=line.gsub!(/^<img .*> <a href="(.*)">.*$/, '1');
  puts('wget '+'$PARAM'+file) unless file.nil? }"

Dabei enthält die Variable PARAM meine Webseite und evtl. weitere Parameter. Ein Beispiel wäre eine benötigte Authentifizierung: PARAM="--http-user=XY --http-passwd=XYZ http://example.org/";.

Allerdings ist meine Lösung ist mit ca. 300 Zeichen sicher nicht die kürzeste/eleganteste deshalb hier mein Aufruf: Wer schafft es besser??

Anmerkung: 1.) Überprüft meine Zeile nicht ob es sich wirklich um eine Index Seite handelt und 2.) weiß ich nicht ob es bei allen Index-Seiten funktioniert. Bisher habe ich es glaube ich nur mit Apache-generierten Standard Seiten getestet. Diese kann man allerdings nach belieben anpassen so das es dann evtl. nicht mehr funktioniert. Beim ISS bin ich recht sicher das es nicht geht … wird der getrost ignoriert. Wenn jemand sonst noch ein Szenario hat, immer her damit!

Comments:

(howto comment?)

OK, ich nehme alles zurück!

Die Seite mit der ich es getestet war, hat den download über die robots.txt ausgeschlossen… Dumm gelaufen…

Allerdings habe ich es nicht geschafft die “Sperre” zu umgehen, obwohl es anscheinend möglich ist

Also so auf die Schnelle (und mit ausreichend Bandbreite) würd ich einfach ein “wget —mirror http://www…./” machen und danach das löschen was man nicht braucht.

Allerdings lädt der Befehl nur die index.html runter, die mir auch über den Browser angezeigt wird. Eben die Seite auf der die ganzen Links stehen. Ich will aber alle Links die dort aufgeführt werden.

“wget -m” würd ich auch sagen, lädt alles runter, was irgendwie verlinkt ist