staging.inyokaproject.org

Webseite automatisiert speichern

Status: Gelöst | Ubuntu-Version: Kubuntu 16.10 (Yakkety Yak)
Antworten |

dafosy

Anmeldungsdatum:
26. Februar 2012

Beiträge: Zähle...

Moin,

ich habe mich mit meiner Vorgehensweise eine Webseite einmal pro Woche automatisch zu speichern verhaspelt. Ich glaube, die Lösung liegt so nahe, dass ich sie einfach nicht sehe.

Ich möchte die Webseite: http://kurse.boerse.ard.de/ard/indizes_einzelkurs_uebersicht.htn?sektion=performance&i=159096 mittels eines Cronjobs einmal pro Woche speichern.

  • (1) Eigentliches Ziel ist, die Kurstabelle gleich in eine CSV zu schreiben.

  • (2) Es würde aber auch schon ein simples Webseiten speichern gemäß Chromium-Borwser - "Speichern unter" reichen.

Ich probierte bisher:

  • Formatierter Text verschiedene Varianten mit wget aus (allerdings werden die PHP-Daten/ Java-Script nicht mitgenommen

  • elinks, links2 und links -dump Varianten

Welche Möglichkeiten seht ihr auf die Schnelle, die Webseite zu speichern. Gibt es vielleicht sogar einen Terminalbefehl für Chromium oder Konqueror?

Gruß und Danke für eine Anregung.

scuba

Avatar von scuba

Anmeldungsdatum:
7. März 2007

Beiträge: 966

Hai dafosy,

Die Lösung ist noch näher ☺

wget http://kurse.boerse.ard.de/ard/indizes_einzelkurs_uebersicht.htn?sektion=performance&i=159096

Weitere Infos im Wiki wget und cron.

LG und Blubb

track

Avatar von track

Anmeldungsdatum:
26. Juni 2008

Beiträge: 7174

Zum stumpfen saugen der Seite reicht ansonsten auch curl ...

.. und wenn Du willst, kannst Du tatsächlich die Auswertung der Tabellen direkt dort anhängen.

Dann könntest Du die Seite auch direkt mit hxextract (aus den HTML-XML-utils) saugen, und mit xmlstarlet dann die Feinauswertung nachschieben.
(und es gibt noch mehr Tools, die man hier alternativ nehmen kann, um HTML zu exzerpieren ...)

LG,

track

seahawk1986

Anmeldungsdatum:
27. Oktober 2006

Beiträge: 11278

Wäre das nicht einfacher sich die Kurse als fertiges csv für den gewünschten Index zu holen, z.B. für den DAX: https://de.finance.yahoo.com/quote/%5EGDAXI/history?ltr=1 Die Parameter in der Download-URL sind eigentlich ziemlich selbsterklärend.

dafosy

(Themenstarter)

Anmeldungsdatum:
26. Februar 2012

Beiträge: 164

Hallo in die Runde und Danke für die Rückmeldungen.

@Scuba: wget funktioniert leider nicht, die php-Daten werden nicht mit geladen, d.h. die gespeicherte Webseite zeigt mir statt der Tabelle folgendes an: "keine Daten gefunden".

@track hxextract habe ich noch gar nicht auf dem Schirm, da lese ich mich mal rein, falls du auf die Schnelle noch Google-Suchbegriffe zur Hand hast, mit denen ich fix einsteigen kann in das Thema, würde ich mich freuen.

curl schaue ich mir auf jeden Fall aber auch nochmal an.

@seahawk Die historischen Daten nur für den Hauptindex sind mir leider zu wenig. Ich will die Performancedaten der einzelnen Werte.

track

Avatar von track

Anmeldungsdatum:
26. Juni 2008

Beiträge: 7174

😀

Ich fürchte, das ist kein PHP-Problem, sondern ein "Quoting"- Problem. Probier es mal mit Gänsefüßchen: 😉

wget "http://kurse.boerse.ard.de/ard/indizes_einzelkurs_uebersicht.htn?sektion=performance&i=159096"

Jedenfalls klappt es bei mir sowohl mit w3m, als auch mit curl (und "Quoting" oder \Escape natürlich 😉 ):

1
2
w3m http://kurse.boerse.ard.de/ard/indizes_einzelkurs_uebersicht.htn?sektion=performance\&i=159096
curl "http://kurse.boerse.ard.de/ard/indizes_einzelkurs_uebersicht.htn?sektion=performance&i=159096" > boerse.html

Zu den HTML-XML-Utils gibt es nicht so viel im Netz, das wichtigste hatte ich Dir oben schon verlinkt.
Aber Du kannst ja nochmal die Beispiele hier im Forum angucken, das ist vielleicht ganz sinnvoll.

LG,

track

seahawk1986

Anmeldungsdatum:
27. Oktober 2006

Beiträge: 11278

dafosy schrieb:

@seahawk Die historischen Daten nur für den Hauptindex sind mir leider zu wenig. Ich will die Performancedaten der einzelnen Werte.

Und was hindert dich daran die csv-Daten für alle gewünschten Indices herunterzuladen und dann jeweils die Veränderungen zu errechnen?

Das Herunterladen und errechnen der Veränderung zur Vorwoche ist schnell erledigt, wenn man weiß, wie die Index-Werte heißen:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
#!/usr/bin/env python3
import csv
import io
import os.path
from datetime import datetime, timedelta
from urllib import parse, request

indices = [
    '^GDAXI', # Dax
    'LHA.DE', # deutsche Lufthansa
    'BMW.DE', # BMW
]
data_dir = "/tmp"

url_template = "http://chart.finance.yahoo.com/table.csv?%s&ignore=.csv"

if __name__ == '__main__':
    today = datetime.utcnow()
    yesterday = today - timedelta(days=1)
    a_week_ago = today - timedelta(days=8)
    filename = os.path.join(data_dir, "indices_%s_%s.csv" % (
        a_week_ago.date().strftime("%d.%m.%Y"),
        yesterday.date().strftime("%d.%m.%Y")
    ))
    with open(filename, 'w') as f:
        fieldnames = ["Index", "Date", "Open", "High", "Low" ,"Close", "Volume",
                      "Adj Close", "Change 1w"]
        csv_result = csv.DictWriter(f, fieldnames=fieldnames)
        csv_result.writeheader()
        for index in indices:
            data = {
                's': index,
                'a': str(int(a_week_ago.strftime("%m")) - 1),
                'b': a_week_ago.strftime("%d"),
                'c': a_week_ago.strftime("%Y"),
                'd': str(int(yesterday.strftime("%m")) - 1),
                'e': yesterday.strftime("%d"),
                'f': yesterday.strftime("%Y"),
                'g': "w"  # d=daily, w=weekly
                }
            params = parse.urlencode(data)
            print("downloading data from %s" % (url_template % params))
            with request.urlopen(url_template % params) as r, open(filename, 'w') as f:
                data = io.StringIO(r.read().decode())
                csv_raw = csv.DictReader(data)
                this_week = next(csv_raw)
                last_week = next(csv_raw)
                change = float(this_week['Adj Close']) / float(last_week['Adj Close']) - 1
                this_week['Change 1w'] = change
                this_week['Index'] = index
                csv_result.writerow(this_week)
    print("saved data to %s" % (filename))

Edit: man kann auch gleich alles in eine Datei schreiben

dafosy

(Themenstarter)

Anmeldungsdatum:
26. Februar 2012

Beiträge: 164

Danke. Mit den Infos kann ich mir erstmal eine zufriedenstellende Lösung bauen.

Antworten |