Nabend, ich möchte auf einem alten Android Tablet eine Anzeigetafel programmieren und mir dort Wetter, Benzinpreise, Kalender, News, etc. wie hier https://baublog.ozerov.de/2016/01/wand-pc-fuer-smart-home-mit-fhem-und-tablet-ui/ anzeigen lassen. Um die Anzeige aber auch auf Handy und PC angucken zu können, habe ich mir überlegt eine Website zu programmieren. Zunächst habe ich im Internet geguckt wie ich HTML Seiten auslesen (parsen) kann. Dabei bin ich schnell auf PYTHON in Verbindung mit BeautifulSoup gestoßen. Damit klappt das auslesen der entsprechenden Seiten hervorragend. Nachdem ich das hinbekommen habe ist mir jetzt nicht klar, wie ich PYTHON in meine Website so integrieren kann, dass diese den PYTHON Script in bestimmten Zeitabständen automatisch ausführt um die Daten zu beschaffen. Es ist wohl irgendwie möglich mit PHP aber das hat bisher bei mir nicht geklappt. Dadurch habe ich mich jetzt doch dazu entschlossen zu gucken wie das mit JavaScript funktioniert, da diese ja bekannterweise gut mit HTML kombinierbar ist. Da bin ich auf Node.js und Cheerio gestoßen. Das klappt auch relativ gut (zumindest bei der Wetter.de Seite). Jetzt habe ich versucht das in eine HTML zu integrieren bekomme aber im Browser eine Fehlermeldung "Uncaught ReferenceError: require is not defined". Kann mir jemand weiterhelfen? Genaugenommen will ich nur wissen wie ich meinen Daten regelmäßig aus den Internetseiten laden kann und dann anschließend auf meine Website darstellen kann. Ich habe mal im Anhang sowohl den PYTHON Script als auch den Javascript Code inklusive HTML Code eingestellt.
Robin F. schrieb: > Dabei bin ich schnell auf PYTHON in Verbindung mit > BeautifulSoup gestoßen. Damit klappt das auslesen der entsprechenden > Seiten hervorragend. Nur weil ich letztens etwas ähnliches gesucht habe: https://scrapy.org/ Bei deinem Problem kann ich leider (noch) nicht helfen.
Danke erstmal. Wenn ich das richtig verstehe ist das nur eine andere Variante um eine html zu parsen. Mein Problem mit Python ist nur, ich weiß nicht wie ich per html, Javascript oder PHP vernünftig bzw. überhaupt meinen PYTHON Script ausführen lassen kann. Die Verarbeitung wäre glaube eher weniger das Problem. Ich würde beispielsweise die Daten in eine .txt speichern und per Javascript in meine Website implementieren.
Das muß das Frontend machen, sprich in index.html integriert sein. Les mal: https://www.w3schools.com/js/js_timing.asp
Anmerkungen meinerseits, um zum einen meinen Senf dazuzugeben, und zum anderen Dir zukünftig die Nerven zu schonen: 1. Bevor Du aus HTML parst, such mal ob es nicht evtl die Daten auch per API gibt. Oft sind die für privat kostenlos (bei geringer Nutzung). Vorteil ist daß Du nicht jedesmal wenn der Webdesigner eine Inspiration hat den Scraper anpassen musst. 2. Trenne das Sammeln vom Darstellen. Schiebe die Daten in zB MySQL (via cron alle x Minuten). Zusammen mit id und timestamp baust Du über die Zeit eine Datensammlung auf, die Du evtl mal auswerten willst (zB Spritpreisverlauf). 3. Trenne Layout vom Programmcode. Entweder "im Code" wie es zB PHP erlaubt (oben den Code, unten im HTML nur noch <?php echo $var; ?>). Oder besser einen richtigen Template-Engine, wie zB Smarty bei PHP. 4. Wäge ab, ob Du wirklich einen extra Parser einbinden willst, oder die Bordmittel der Sprache Deiner Wahl ausreichen. Ich nutze zB Perl dafür und habe noch nie zum HTML parsen was extra gebraucht. KISS-Prinzip. 5. Javascript. Würde ich nur für AJAX verwenden; und nein, man braucht den ganzen jquery/cheerio/etc Overhead nicht. Auch nodejs ist nur gehyped weil Hipster-DevOps bloß noch Fragemente zusammenkopieren, aber nicht mehr richtig programmieren können. Bevor ich Zeit damit verschwende um ein npm-Modul zu ergoogeln schreibe ich die paar Zeilen selber (Hallo left-pad). Außerdem: Sicherheit.
Hirgl schrieb: > Anmerkungen meinerseits, um zum einen meinen Senf dazuzugeben, und zum > anderen Dir zukünftig die Nerven zu schonen: > > 1. Bevor Du aus HTML parst, such mal ob es nicht evtl die Daten auch per > API gibt. Oft sind die für privat kostenlos (bei geringer Nutzung). > Vorteil ist daß Du nicht jedesmal wenn der Webdesigner eine Inspiration > hat den Scraper anpassen musst. Du hast sicherlich recht, ich möchte aber nicht einfach von irgendwelchen Seiten die Infos erhalten sondern dazu auch noch lernen und gucken wie ich unabhängig alles was ich möchte auslesen kann. > 2. Trenne das Sammeln vom Darstellen. Schiebe die Daten in zB MySQL (via > cron alle x Minuten). Zusammen mit id und timestamp baust Du über die > Zeit eine Datensammlung auf, die Du evtl mal auswerten willst (zB > Spritpreisverlauf). Kann ich hier mit PYTHON arbeiten oder wie du unten schreibst lieber mit Perl? Bei PYTHON hätte ich wieder das Problem, wie wird das Programm automatisch gestartet. > 4. Wäge ab, ob Du wirklich einen extra Parser einbinden willst, oder die > Bordmittel der Sprache Deiner Wahl ausreichen. Ich nutze zB Perl dafür > und habe noch nie zum HTML parsen was extra gebraucht. KISS-Prinzip. Ich gucke mal was ich hierzu raus finde und ob ich hiermit an mein Ziel kommen. > 5. Javascript. Würde ich nur für AJAX verwenden; und nein, man braucht > den ganzen jquery/cheerio/etc Overhead nicht. Auch nodejs ist nur > gehyped weil Hipster-DevOps bloß noch Fragemente zusammenkopieren, aber > nicht mehr richtig programmieren können. Bevor ich Zeit damit > verschwende um ein npm-Modul zu ergoogeln schreibe ich die paar Zeilen > selber (Hallo left-pad). Außerdem: Sicherheit. Hierzu habe ich noch nichts gefunden wie man das ohne die zusätzlichen inits bewerkstelligen kann.
Robin F. schrieb: > Du hast sicherlich recht, ich möchte aber nicht einfach von > irgendwelchen Seiten die Infos erhalten sondern dazu auch noch lernen > und gucken wie ich unabhängig alles was ich möchte auslesen kann. Löblich :) Allerdings mußt Du bei einer API auch die Anfragen stellen und die Daten verarbeiten. Da meist über json. Aber zugegeben, parsen (regexp) lernen schadet überhaupt nicht. Rechne aber damit ab und zu updaten zu müssen. > Kann ich hier mit PYTHON arbeiten oder wie du unten schreibst lieber mit > Perl? Bei PYTHON hätte ich wieder das Problem, wie wird das Programm > automatisch gestartet. Du kannst mit allem arbeiten, womit Du umgehen kannst. Python, Perl, PHP, Bash, usw. Solange Du damit a) die gewünschte Webseite abrufen, b) Texte parsen, c) Daten in eine Datenbank schreiben kannst. Ausführen kann man das ganz einfach als Cronjob. > Hierzu habe ich noch nichts gefunden wie man das ohne die zusätzlichen > inits bewerkstelligen kann. Was bewerkstelligen? Zerlege die Aufgabe und mache keine eierlegende Wollmilchsau: Skript 1 (via cron): pullen, parsen, in DB schreiben. Skript 2 (via httpd): aus DB lesen, HTML an Browser liefern.
Hirgl schrieb: >> Kann ich hier mit PYTHON arbeiten oder wie du unten schreibst lieber mit >> Perl? Bei PYTHON hätte ich wieder das Problem, wie wird das Programm >> automatisch gestartet. > Du kannst mit allem arbeiten, womit Du umgehen kannst. Python, Perl, > PHP, Bash, usw. Solange Du damit > a) die gewünschte Webseite abrufen, > b) Texte parsen, > c) Daten in eine Datenbank schreiben > kannst. > Ausführen kann man das ganz einfach als Cronjob. Ah super, dann belese ich mich mal zum Thema Cronjob! Was ich jetzt schon gelesen habe, klingt gut. Ich werde mir dann wohl mal mein Raspberry rauskramen und darauf einen FTP Server installieren. Von dort aus werde ich mal gucken wie das mit dem Cronjob funktioniert. Ich spiele morgen erstmal etwas mit dem Cronjob auf dem Laptop rum und gucke das ich erstmal das Grundgerüst der Website auf die Beine stellen kann. Ich werde meine Erkenntnisse dann hier gern mit euch teilen! >> Hierzu habe ich noch nichts gefunden wie man das ohne die zusätzlichen >> inits bewerkstelligen kann. > Was bewerkstelligen? Zerlege die Aufgabe und mache keine eierlegende > Wollmilchsau: > Skript 1 (via cron): pullen, parsen, in DB schreiben. > Skript 2 (via httpd): aus DB lesen, HTML an Browser liefern. Das werde ich mir zu Herzen nehmen. Ich lese ja aktuell mit Python ja schon die Daten aus. Dann werde ich die Daten in einer .txt speichern und gucken das ich die vernünftig in die Website einlese. Wenn das alles nach meinen Vorstellungen funktioniert, implementierte ich noch ein ESP8266 und werde Temperatursensoren usw. auch noch mit anzeigen lassen. Erstmal vielen Dank für die Hilfe!
Du könntest auch in Python einen kleinen WebServer implementieren mit z.B. Bottle https://bottlepy.org/docs/dev/, und deine Funktion/Skript dann über den Webserver starten. D.h. du machst über HTTP eine Anfrage an den Python webserver,der führt dir dein Skript aus und gibt die Antwort wieder zurück an die Webseite. Das geht ganz gut über Ajax-Anfragen. Entweder mit jQuery, oder, aus meiner Sicht schlanker falls du jQuery sonst nicht brauchst, mit xmlhttprequest. Oder aber wie jmd. schon erwähnt hat, schreibst du die mit einem Cronjob all paar Stunden in eine Datenbank, welche dann von HTML und JavaScript integriert werden kann.
Robin F. schrieb: > Wenn das alles nach meinen Vorstellungen funktioniert, implementierte > ich noch ein ESP8266 und werde Temperatursensoren usw. auch noch mit > anzeigen lassen. Wieso nicht direkt alles mit dem ESP8266 machen? Ich meine der hat locker genügend Rechenleistung um die Daten zu sammeln, und in dein HTML zu integrieren. Die Darstellung erfolgt ja dann sowieso im Browser, dass rendern übernimmt also eh die CPU des Computers.
trampi schrieb: > Robin F. schrieb: >> Wenn das alles nach meinen Vorstellungen funktioniert, implementierte >> ich noch ein ESP8266 und werde Temperatursensoren usw. auch noch mit >> anzeigen lassen. > > Wieso nicht direkt alles mit dem ESP8266 machen? Ich meine der hat > locker genügend Rechenleistung um die Daten zu sammeln, und in dein HTML > zu integrieren. Die Darstellung erfolgt ja dann sowieso im Browser, dass > rendern übernimmt also eh die CPU des Computers Also ich meine dass der ESP dir als Webserver dient, und dem Tablet die Seite zur Verfügung stellt.
trampi schrieb: > Du könntest auch in Python einen kleinen WebServer implementieren mit > z.B. Bottle https://bottlepy.org/docs/dev/, und deine Funktion/Skript > dann über den Webserver starten. D.h. du machst über HTTP eine Anfrage > an den Python webserver,der führt dir dein Skript aus und gibt die > Antwort wieder zurück an die Webseite. Das geht ganz gut über > Ajax-Anfragen. Entweder mit jQuery, oder, aus meiner Sicht schlanker > falls du jQuery sonst nicht brauchst, mit xmlhttprequest. Oder aber wie > jmd. schon erwähnt hat, schreibst du die mit einem Cronjob all paar > Stunden in eine Datenbank, welche dann von HTML und JavaScript > integriert werden kann. Das überschreitet aktuell meinen Horizont. Ich bin noch nicht so sehr tief in der Materie und versteh noch nicht richtig was du mir hier sagen will. :)
trampi schrieb: > trampi schrieb: >> Robin F. schrieb: >>> Wenn das alles nach meinen Vorstellungen funktioniert, implementierte >>> ich noch ein ESP8266 und werde Temperatursensoren usw. auch noch mit >>> anzeigen lassen. >> >> Wieso nicht direkt alles mit dem ESP8266 machen? Ich meine der hat >> locker genügend Rechenleistung um die Daten zu sammeln, und in dein HTML >> zu integrieren. Die Darstellung erfolgt ja dann sowieso im Browser, dass >> rendern übernimmt also eh die CPU des Computers > > Also ich meine dass der ESP dir als Webserver dient, und dem Tablet die > Seite zur Verfügung stellt. Das ist auch eine gute Idee. Ich fange jetzt erstmal klein an und gucke wie ich die Daten dargestellt bekomme. Wenn ich soweit bin gucke ich mal ob ich das direkt mit dem ESP mache oder mit einem Raspberry oder gucke wie was du eben noch gemeint hast. Mit dem Python Webserver.
Robin F. schrieb: > trampi schrieb: >> ...Du könntest auch in Python einen kleinen WebServer implementieren mit >> z.B. Bottle https://bottlepy.org/docs/dev/, und deine Funktion/Skript >> dann über den Webserver starten. D.h. du machst über HTTP eine Anfrage... > > Das überschreitet aktuell meinen Horizont. > Ich bin noch nicht so sehr tief in der Materie und versteh noch nicht > richtig was du mir hier sagen will. :) Das waere die schoenste Loesung, du koenntest alles in einer Datei haben. Du hast die Funktionen ja schon geschrieben, du musst das einfach in die Route packen und dann HTML Code ausgeben. Du musst dann nicht mit AJAX arbeiten, du kannst das auch einfach mit dem Refresh machen: <meta http-equiv="refresh" content="5"> Reicht voellig aus, deine Website zeigt ja nur Daten an. Bei jedem Aufruf werden die Funktionen neu durchlaufen und die Daten aktualisiert. Fertig :)
In der zweiten Auflage von "Head First Python" von Paul Barry with als Lehrbeispiel ein kleiner Webserver auf Basis von flask programmiert, das Ganze mundgerecht und sauber erklärt. Falls der TO Zugriff auf eine Hochschulbibliothek hat, wäre das auch ein Ansatz. (Auch ansonsten ist das Buch sein Geld wert, wenn man die "Brain Friendly Guide"-Serie mag.)
Nur der Vollständigkeit halber ein kleines Zitat aus den AGB der Seite, die der TE "parsen und ausgeben" möchte:
1 | Die Suche im clever-tanken.de-Internetangebot ist kostenfrei. Ein Publikationsrecht von einzelnen Informationen von clever-tanken.de steht dem Nutzer im Rahmen des persönlichen Gebrauchs, insbesondere zur Darstellung und Verlinkung in sozialen Netzwerken zu. Eine weitergehende und umfängliche Nutzung der von clever-tanken.de bereitgestellten Informationen ist ohne Einverständniserklärung seitens clever-tanken.de nicht gestattet. Insbesondere ist es nicht gestattet, eigene Robots, Webcrawler oder sonstige Automatismen zu programmieren und die Inhalte von clever-tanken.de systematisch und umfassend in anderen Medien darzustellen oder für sonstige Zwecke zu extrahieren und zu verarbeiten. |
Sei also sehr sehr vorsichtig, und pack die geklauten Informationen blos nicht irgendwo hin, wo sie von extern zugreifbar sind.
Benjamin U. schrieb: > Robin F. schrieb: >> trampi schrieb: >>> ...Du könntest auch in Python einen kleinen WebServer implementieren mit >>> z.B. Bottle https://bottlepy.org/docs/dev/, und deine Funktion/Skript >>> dann über den Webserver starten. D.h. du machst über HTTP eine Anfrage... >> >> Das überschreitet aktuell meinen Horizont. >> Ich bin noch nicht so sehr tief in der Materie und versteh noch nicht >> richtig was du mir hier sagen will. :) > > Das waere die schoenste Loesung, du koenntest alles in einer Datei > haben. Du hast die Funktionen ja schon geschrieben, du musst das einfach > in die Route packen und dann HTML Code ausgeben. > > Du musst dann nicht mit AJAX arbeiten, du kannst das auch einfach mit > dem Refresh machen: > > <meta http-equiv="refresh" content="5"> > > Reicht voellig aus, deine Website zeigt ja nur Daten an. Bei jedem > Aufruf werden die Funktionen neu durchlaufen und die Daten aktualisiert. > > Fertig :) Super vielen Dank. Ich guck mir das mal genauer an :) Ich bin aktuell auch noch nicht so viel weiter. Das Designe steht soweit aber ich habe noch Probleme mit dem implementieren der Daten. Von daher bietet es sich ja an sich das Thema doch nochmal genauer anzugucken.
Walter T. schrieb: > In der zweiten Auflage von "Head First Python" von Paul Barry with als > Lehrbeispiel ein kleiner Webserver auf Basis von flask programmiert, das > Ganze mundgerecht und sauber erklärt. Falls der TO Zugriff auf eine > Hochschulbibliothek hat, wäre das auch ein Ansatz. (Auch ansonsten ist > das Buch sein Geld wert, wenn man die "Brain Friendly Guide"-Serie mag.) Vielen Dank! Auch dieses Tutorial gucke ich mir mal an :) @Spaßverderber: Oh Danke für die Info. Darüber hatte ich noch gar nicht nachgedacht! Ich habe auf keinen Fall vor die Daten weiter zu geben. Ich werde mal gucken ob ich noch ne Alternative Seite finde um solche Infos zu bekommen.
:
Bearbeitet durch User
Beitrag #5970495 wurde von einem Moderator gelöscht.
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.