tool/script/sprache gesucht (für eine Art Webcrawler)

SilvaSurf

I am McLovin!
Hi,

folgende Situation: Ich habe Zugriff auf eine Seite, die etwa so aussieht:
Code:
TextblockA
TextblockB

Link4
Link3
Link2
Link1

Es kommen sporadisch immer wieder Links dazu (also dann Link5, Link6, etc) - das können auch mehrere Links auf einmal sein. Diese Links führen auf eine Unterseite, wo dann jeweils ein File runtergeladen werden kann. Wobei man den File-Download-Link anhand der Links (Link4, etc) basteln kann. Es müsste also nicht auf die Unterseite zugegriffen werden, wenn man den Link parsen kann.
Ich bräuchte jetzt ein Script oder ähnliches, dass in regelmäßigen Intervallen schaut, ob ein neuer Link dazugekommen ist und wenn ja, dann die/das jeweilige neue File(s) herunterlädt und auf meinen FTP hochlädt.

Mit welcher Programmiersprache, Skriptsprache, Tool, oder ähnliches lässt sich das am besten durchführen? Ich habe keine Probleme damit, mich da rein zu fuchsen, aber ich hätte vorher gerne ausgewählt, was dafür am besten geeignet ist - damit ich nicht plötzlich in einer Sackgasse lande, weil es damit doch gar nicht geht.

Bin für alle Tipps dankbar
 

SilvaSurf

I am McLovin!
aber damit lässt sich die Seite ja nicht um Update prüfen, also ob ein neuer Link dazugekommen ist. Damit kann ich nur die ganze Seite laden. Oder verstehe ich was falsch?
 

dr_tommi

alter Oldie
aber damit lässt sich die Seite ja nicht um Update prüfen, also ob ein neuer Link dazugekommen ist. Damit kann ich nur die ganze Seite laden. Oder verstehe ich was falsch?
Jein.
Du lädst die ganze Seite rekursiv.
-i, --input-file=Datei mit einem Downloadlink pro Zeile einlesen.
-F, --force-htmlMit -i angegebene Datei wie HTML-Datei behandeln. Um relative Links herunterladen zu können. Dazu den --base-Parameter benutzen oder <base href="BASISURL"> zum Quelltext hinzufügen, um die Basisurl festzulegen.
Und dann kommt ein weiterer Parameter ins Spiel:
-N, --timestampingÜbernimmt Modify-timestamp der Dateien auf dem Server. Dateien werden mit der Option nur heruntergeladen, wenn diese neuer sind als die bereits heruntergeladene Version.
Wenn also die Datei schon vorhanden ist, z.B. von einem älteren Download, wird sie nicht nochmal geladen, sondern nur die neuen bzw. geänderten Dateien. Und die Ausgangs-HTML-Seite wird ja auf jeden Fall geändert worden sein wenn neue Links hinzugekommen sind.
 

SilvaSurf

I am McLovin!
ok das habe ich jetzt soweit hinbekommen. Kann ich mit wget auch das file, das gerade heruntergeladen wurde auf meinen ftp server hochladen?
 

dr_tommi

alter Oldie
ok das habe ich jetzt soweit hinbekommen.
Super
Kann ich mit wget auch das file, das gerade heruntergeladen wurde auf meinen ftp server hochladen?
Wget ist ein Downloadtool, kein Uploader. Für den Upload gibt es andere Tools
Aber einen kleines Script, das mit Powershell, curl, wput oder der ftp.exe die Datei dann hochlädt, sollte man doch hinbekommen.
Egal ob nun als Batch, Powershell oder was auch immer.
Vielleicht ein Script in der Art:
  • Holen der Dateien mit Wget
  • Vergleich der Datumsangaben der Dateien mit dem gespeicherten Zeitpunkt des letzten Downloads, also Prüfung ob neue Dateien seit dem letzten Download hinzugekommen sind oder geändert wurden
  • Upload der neueren Dateien
  • Speicherung des Datums für den nächsten Downloadvergleich
Nur mal so als Anregung am frühen Morgen
 

SilvaSurf

I am McLovin!
Ftp.exe habe ich gesehen, dafür brauche ich aber eine extra Datei um den upload zu bekommen, so eine Art Script Datei . Mir wäre eine Kommando Zeilen Lösung lieber weil ich das mit wget auch als bat Datei gelöst habe und dann gleich die Variablen (Datei Name der Datei die hochgeladen werden muss und der Pfad) mitgeben könnte. Irgendwelche Tipps mit welchem Tool das gehen könnte?
Die anderen Tools schaue ich mir mal an.
 

SilvaSurf

I am McLovin!
Aber in powershell kann ich meine bat Datei mit wget nicht nutzen, oder? Weil alles nochmal und in powershell neu schreiben mag ich nicht.
 

dr_tommi

alter Oldie
Ftp.exe habe ich gesehen, dafür brauche ich aber eine extra Datei um den upload zu bekommen, so eine Art Script Datei .
Das ist doch überhaupt kein Problem.
Lass diese Datei doch einfach von deiner Batch-Datei erzeugen.
Ein paar Echo-Befehle mit den benötigten Daten und dann per ">>" an die Scriptdatei anhängen und zum Schluß dann die FTP-Exe mit den entsprechenden Parametern aufrufen.

Ich zitiere mal ein Beispiel:
Code:
@echo off
REM Generate the script. Will overwrite any existing temp.txt
echo open servername> temp.txt
echo username>> temp.txt
echo password>> temp.txt
echo put %1>> temp.txt
echo quit>> temp.txt

REM Launch FTP and pass it the script
ftp -s:temp.txt

REM Clean up.
del temp.txt

Replace servername, username, and password with your details and the batch file 
will generate the script as temp.txt launch ftp with the script and then delete the script.
Das Problem dabei ist nur die Ermittlung welche Datei hochzuladen ist.
Eine Möglichkeit wäre mit einer Schleife nach dem Dateidatum zu gehen und die jeweils neueste Datei dann damit zu ermitteln,
Das klappt aber nur wenn es nur eine ist, bei mehreren "neuen" Dateien wird das schwieriger.

Mir wäre eine Kommando Zeilen Lösung lieber weil ich das mit wget auch als bat Datei gelöst habe und dann gleich die Variablen (Datei Name der Datei die hochgeladen werden muss und der Pfad) mitgeben könnte. Irgendwelche Tipps mit welchem Tool das gehen könnte?
Die anderen Tools schaue ich mir mal an.
Schon klar, aber der Ansatz das als reine Powershell-Lösung zu bauen hat auch was nettes.
Da würdest du die Nutzung der externen Tools sparen und direkt den Inhalt der Webseite parsen und die betroffenen Dateien dann gleich direkt hochladen können.
Und gemeinsam bekommen wir das Script schon passend.
 

dr_tommi

alter Oldie
Pures Powershell. Da braucht's keine Tools ...

Invoke-Webrequest
Das habe ich mal zum Anlass genommen und etwas gebastelt.
Aber in powershell kann ich meine bat Datei mit wget nicht nutzen, oder? Weil alles nochmal und in powershell neu schreiben mag ich nicht.
Must du ja auch nicht, das machen wir doch gerne. ;)

Das Powershellscript im Anhang untersucht die angegebene Webseite auf Links und versucht dann die Dateien dieser Links herunterzuladen, falls sie noch nicht in dem lokalen Verzeichnis existieren. Anschließend werden diese neuen Dateien per FTP auf den angegebenen Server geladen.
Download vom Webserver und Upload zum FTP-Server erfolgen also nur dann, wenn die betreffende Datei noch nicht im lokalen Ordner existiert.

Nur so als Idee, quick and dirty.

Im Kopf sind die entsprechenden Variablen mit den Daten zu füllen.
Ich habe das mit meinem lokalen Web- und FTP-Server getestet und einer gewissen Anzahl von Dateien verschiedenster Art.

Da besteht auf jeden Fall noch Verbesserungspotential aber so als Machbarkeitsstudie geht das schon mal.
 

Anhänge

  • test123.ps1.txt
    1,5 KB · Aufrufe: 18

SilvaSurf

I am McLovin!
So, jetzt habe ich es nach ein paar Tagen Tüftelei selber hinbekommen, danke für eure Anregungen!! :yo :yo
Die Lösung ist grob eine bat Datei, die mit wget die links prüft und dann - falls es sich um einen validen Link handelt - per curl (hier gehen ftp daten als parameter, ohne extra txt datei) die Datei auf den Server hochlädt. Das läuft zu meiner absoluten Zufriedenheit :)
 
Oben Unten