Forum: PC-Programmierung Webseite automatisch downloaden und auswerten


von Windy (Gast)


Angehängte Dateien:

Lesenswert?

Hallo Leute,

es geht um folgende Seite: http://www.enertrag.de/standortkarte.php

Bei der Seite (siehe Anlage) handelt es sich um die Anzeige der 
Auslastung von verschiedene Windparks. Um abzuschätzen zu können, wie 
die Ausbeutung der einzelenen Parks ist, würde ich gerne die 
Internetseite automatisch downloaden (z.B. alle 30min) und auswerten 
(Uhrzeit und Auslastung Windpark XYZ in eine Datenbank speichern).

Das ganze würde ich gerne in Delphi machen, kann aber auch eine andere 
Sprache sein.

Das Problem ist, wenn ich den Link downloade sieht der Quelltext ganz 
anders aus. Ich denke, dass die Internetseite ein Java-Script auslöst 
oder andere Links auslöst.

Hat jemand eine Idee _ Danke ?!

von unbeschreiblicher Rahul (Gast)


Lesenswert?

http get...
Das sollte mit Winsock laufen...
Und: Ich habe keine Ahnung von Delphi.

von mr.chip (Gast)


Lesenswert?

Hallo

Ist definitiv kein Javascript.

Ich denke, du schaffst es die Webseite ähnlich einer Datei als Stream zu 
öffnen? Wenn du soweit bist, dann gehts halt darum, die richtigen 
Inhalte herauszulesen. Evtl. könnte hier ein XML-Parser helfen, aber 
Vorsicht: Viele Webautoren achten nicht sehr auf validen Code.

Gruss

Michael

von yalu (Gast)


Lesenswert?

Ich würde so etwas in Python versuchen. Die Sprachen ist einfach zu 
erlernen, und die mitgelieferten Bibliotheken bieten alles, was du 
brauchst, und vieles mehr z.B.

  urllib2:     Herunterladen von Webseiten in 3 Code-zeilen
  HTMLParser:  der Name sagt's
  re:          reguläre Ausdrücke
  shelve:      persistente Dictionaries, einfach zu benutzender
               Datenbankersatz

www.python.org

von Thomas (Gast)


Lesenswert?

Wenn man mit wget die Seite herunterlädt stehen noch alle Informationen 
drin.

Du bräuchtest nur festzustellen ob zwischen "<li class" und "</li>" 
einer deiner Standorte vorhanden ist, z.B. "Weenermoor".
Wird der Begriff gefunden, die Eigenschaft nach class="standort 
betrieb_60" abfragen, dann hast du die aktuelle Leistung.

Der farbige Punkt ist nur ein Listenzeichen, dass gemäß der class im 
CSS-File  entsprechend eingefärbt wird.

Wenn du WinAVR installiert hast sind eigentlich schon alle dafür nötigen 
Programme vorhanden.

von Thomas (Gast)


Angehängte Dateien:

Lesenswert?

Hab mal unter Linux ein kleines Shell-Script gebaut was das gwünschte 
macht.
Unter Windows gibts irgendwie Probleme den Ausgabeumleitungen ">", 
obwohl es das da eigentlich auch gibt.

PS:
Warum kann ich das Skript nur als Anhang hier reinsetzen, und nicht als 
Text, dann kommt nämlich die Meldung:
"Your post seems to contain Spam: ""."
Kann man das verhindern?

von Thomas (Gast)


Lesenswert?

Die Ortsdatei und eine Beispielausgabe:

Ort     :  Bougainville
Leistung:  betrieb_90
**********************
Ort     :  Merdelou
Leistung:  betrieb_90
**********************
Ort     :  Fontanelles
Leistung:  betrieb_90
**********************
Ort     :  Côte_d'Albâtre
Leistung:  im-bau
**********************
Ort     :  Roinville
Leistung:  im-bau
**********************
Ort     :  Oresmaux
Leistung:  im-bau
**********************
Ort     :  Chemin_de_Tuleras
Leistung:  im-bau
**********************
.
.
.

von Johnny (Gast)


Lesenswert?

Delphi ist schon gut für sowas, hab mal ein Tool in Delphi programmiert, 
das von Zeitungshomepages die Schlagzeilen runtergeladen und auf einer 
LED-Laufschrift angezeigt hat.

Ich empfehle die kostenlosen Indy-Komponenten, die laufen stabiler als 
die bei Delphi beiliegenden Netzwerkkomponenten:
http://www.indyproject.org/

Eine Webseite kannst Du dann mit einer Codezeile und der IdHTTP 
Komponente runterladen:

HTTP_Page := 
F_Main.IdHTTP1.Get("http://www.enertrag.de/standortkarte.php";);

In der String-Variablen "HTTP_Page" steht dann der Webseitenquelltext 
drin, den Du verarbeiten musst.
Das ganze besteht dann also nur noch aus Stringhandling. Suche im 
String, was für Dich relevant ist und kopiere das raus. Rechne damit, 
dass der Webmaster mal was an der Webseite ändert, daher sollten Deine 
Routinen fehlertolerant und "flexibel" konzipiert sein, so dass das 
ganze auch noch funktioniert, nachdem der Webmaster z.B. eine andere 
Werbung eingebaut hat.
Viel Spass

von Windy (Gast)


Lesenswert?

Zuerst einmal Danke für alle Antworten.

@Jonny
Habe genau dies schon probiert. Doch das Ergebnis sieht anders als 
erwartet aus (PHP?).

Hier die Procedure:

procedure TFormMain.ButtonDownloadClick(Sender: TObject);
begin
  HTTPGetFile.URL :='http://www.enertrag.de/standortkarte.php';;
  HTTPGetFile.FileName := Pfad+'Download.html';
  HTTPGetFile.GetFile;
end;

Und Hier das Ergebnis:


Logo

    * 0.1Home
    * 0.2Adressen
    * 0.3Impressum
    * 0.4Sitemap
    * 0.5Hilfe
    * 0.6Anmelden

    * 2 Standorte
    * 3 Standortkarte
    * 4 Fonds
    * 5 Wertpapiere
    * 6 Unternehmen
    * 7 Geschäftskontakt
    * 8 Informationen
    * 9 Für Geschäftspartner
    * 9Meine Fonds



    * Standortkarte
    * Uckermark

21:18 h

    * Dauerthal
    * Prenzlau
    * Pasewalk
    * Drense
    * Nadrensee
    * Hohenfelde
    * Nechlin
    * Neuenfeld
    * Uckermark
    * Randowhöhe
    * Schönfeld
    * Seelübbe
    * Hoher Berg

Die Karte zeigt die zur Zeit an den Standorten erzeugte Leistung in 
Prozent der maximalen Leistung (Last)

    * Lastsymbole:
    * in Planung/im Bau
    * keine Last
    * schwach (unter 10%)
    * 10..20%
    * mittel (20..30%)
    * 30..40%
    * stark (41..50%)
    * 51..60%
    * hoch (61..70%)
    * 71..80%
    * voll (81..90%)
    * 91..100%

von Johnny (Gast)


Lesenswert?

Das PHP Script erzeugt ja auch nur HTML Seiten, darum ist das für den 
Parser egal, ob nun .html oder .php oder sonstwas hinter dem Dateinamen 
steht.
Sieht aus, als stünde in Deiner Variablen nicht der Source Code der HTML 
Seite drin, sondern der sichtbare Teil der Webseite.
Du musst in der Doku der Komponente nachschauen, wie Du an den HTML 
Sourcecode kommst.

Diese Zeile hat bei meinem Projekt genau dies getan:
IdHTTP1.Get("http://www.enertrag.de/standortkarte.php";);

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
Noch kein Account? Hier anmelden.