Hallo Leute, ich möchte aus bestimmten Webseiten regelmäßig Daten extrahieren (genau: Börsenkurse zu bestimmten Tageszeiten) und diese Daten in Textform auf der Festplatte speichern. Ich habe bis jetzt allerdings nur sehr hardwarenah programmiert (Assembler für verschiedene Mikrocontroller). Habe dort zwar fortgeschrittene Kenntnisse, die helfen mir jedoch bei der oben genannten Aufgabe wenig. Ich suche nun eine Sprache, mit der ich diese Aufgabe lösen kann. Am liebsten würde ich es als Script auf einem Linux-Internetrouter (fli4l) laufen lassen, dann müsste kein zusätzlicher Rechner dafür in Betrieb sein. Grob teilt sich die Aufgabe in folgende Teilaufgaben: A) Webseite einlesen und in einem String speichern B) Position im String finden und Wert auslesen C) Wert in Datei speichern (an bestehende Datei anhängen) Und das zyklisch alle paar Minuten. Hier im Forum bin ich über ein ähnliches Problem gestolpert, bei dem Phyton als Sprache vorgeschlagen wurde. Was haltet ihr davon? Gibt es alternative Sprachen, die ich mir anschauen sollte (habt ihr evtl. Beispiel-Links)? Würde ich es auch als Skript auf meinem Router zum Laufen bringen können? Ein paar Schubser in die richtige Richtung wären nett! Danke, Thomas
Wenn du auf dem Gerät einen Webserver laufen hast, könntest du PHP + Cronjob verwenden. Ist dann sehr einfach, Webseiten mit regulären Ausdrücken (regex) auszuwerten...
PERL ftw, ohne deinen Text gelesen zu haben
@Chrisk86 Cron ist auf dem Router vorhanden, jedoch kein Webserver, also auch kein PHP. Einzige Möglichkeit für den Router wären Shell-Skripte. Gruß, Thomas
Thomas wrote:
> Einzige Möglichkeit für den Router wären Shell-Skripte.
Dabei kann ich dir leider nicht helfen. Kenne mich nicht gut genug damit
aus...
Chris
PHP hat doch nix mit Webserver zu tun. Das kann man genauso benutzen, wie Shellskripte auch. Perl ist PRÄDESTINIERT für sowas... ist ja auch eine 'practical extraction and reporting language'. Shellskripte wäre quasi Selbstmord, wobei man da eigentlich auch mit AWK und Konsorten viel erreichen kann. Ist allerdings umständlich bei miserablen Webseiten, die sich nen Dreck um HTML scheren (...Reichelt...) und nie mal konsistent daherkommen. Python geht auch, Ruby auch... gehen eigentlich alle, guck mal, was da ist. Ihre Macken haben sie alle :-)
Nimmst du Perl und das Mechanize Modul. Das ist ein Webbrowser den man mit Perl steuern kann. Für den Rest einfach regex benutzen :-) http://search.cpan.org/~petdance/WWW-Mechanize-1.54/lib/WWW/Mechanize.pm
Nein, das ist eine Clientanwendung, die auf einer Windows muehle laufen kann. Ich wuerde eine Sprache waehlen, die die Infrastruktur bietet. Eine TCP Socket Verbindung zu einem http:// Server, plus etwas String verarbeitung. Da passt Delphi wunderbar.
hmm wrote: > Nein, das ist eine Clientanwendung, die auf einer Windows muehle laufen > kann. Ich wuerde eine Sprache waehlen, die die Infrastruktur bietet. > Eine TCP Socket Verbindung zu einem http:// Server, plus etwas String > verarbeitung. Da passt Delphi wunderbar. ??? PHP, Perl, Ruby und Python bieten allesamt sowohl direkten Netzwerkzugriff als auch eine höhere Ebene, wie etwa CURL. Selbst in Shellskripten kann man CURL problemlos benutzen.
soweit ich weiß, gibt es nicht nur einen Webdienst, der Börsenkurse als XML liefert. Wozu also HTML zu Fuß auswerten, wenn man alles schon ein Reinform bekommt ;)
Hallo Thomas, sowas geht auch in einem bash-Script mit curl (oder wget), grep, date und sed, falls selbige mit fli4l laufen. Bei sed braucht man etwas Fantasie und viel trial&error, bei Websiten, deren Struktur sich nicht ändert (ein paar Daten in Tabelle etc.), funktioniert das IME zuverlässig. Minimalbeispiel:
1 | #!/bin/bash
|
2 | |
3 | |
4 | WEBSITE="http://www.ariva.de/boersenkurse.m" |
5 | outfile="DeutscheBank.txt" |
6 | |
7 | datum="$(date)" |
8 | kurs="$( curl "$WEBSITE" | \ |
9 | grep -A 2 "Deutsche Bank" | \ |
10 | tail -n1 | \ |
11 | sed -e 's/.*"right">//' -e 's/ €.*//'\ |
12 | )" |
13 | echo "$datum -----> $kurs" >> "$outfile" |
Um es nochmal hervorzuheben: awk . Wenn kein Perl auf dem Router greifbar ist, ist ein awk wahrscheinlich immerhin da, oder mit akzeptablem aufwand dort installierbar.
Auf dem Router läuft Busybox, allerdings ohne "awk" (nur mit "sed"). Ich werde von daher Tom's Minimalbeispiel als Basis nehmen, "curl" gegen "wget" tauschen und mal schauen, ob ich es damit gebacken bekomme. Bin da recht zuversichtlich. Ist halt praktischer, wenn ein Skript direkt auf dem Router läuft und ich mir nur die Ergebnisse bei Bedarf auf einen (beliebigen) Arbeitsrechner holen kann. Vielen Dank für die zahlreichen Kommentare. Gruß, Thomas
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.