Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. Parser Adapter liefert kein Ergebniss

    NEWS

    • Neuer Blog: Fotos und Eindrücke aus Solingen

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    Parser Adapter liefert kein Ergebniss

    This topic has been deleted. Only users with topic management privileges can see it.
    • dirk_1930
      dirk_1930 @Homoran last edited by

      @homoran
      zählen wäre blöd 😀

      <h2 id="weather-report">Wetterbericht und Warnungen</h2>
              <div class="col-12">
                  <p><strong>Hoher Luftdruck bestimmt längerfristig das Wettergeschehen in Nordrhein-Westfalen. Dabei fließt mit südöstlicher Strömung zunehmend mildere Luft ein.<br />
      FROST:<br />
      Heute zunächst gebietsweise leichter Frost zwischen 0 und -4 Grad, in Bodennähe vereinzelt bis -8 Grad.<br />
      Auch in der der Nacht zu Freitag muss vor allem im Bergland und seinen Tallagen mit leichten Frost zwischen 0 und -3 Grad gerechnet werden. <br />
      WIND:<br />
      In der Nacht zu Freitag frischt der Wind auf den Kammlagen böig auf, zeitweise werden hier starke, vereinzelt auch stürmische Böen zwischen 55 und 70 km/h (BFT 7-8) aus Südost erwartet.</strong></p><p>Heute Vormittag sowie im weiteren Tagesverlauf oft strahlender Sonnenschein und trocken. Sehr mild bei Höchstwerten zwischen 14 und 17 Grad, im höheren Bergland um 10 Grad. Im Verlauf des Tages mäßig auffrischender und leicht böiger Südost- bis Südwind.<br />
      In der Nacht zum Freitag klar. Tiefstwerte 4 bis 2 Grad, in Tallagen des Berglands bis -3 Grad. Im Bergland starke, in Kammlagen stürmische Böen aus Süd bis Südost.</p><p>Am Freitag sonnig und trocken, im Tagesverlauf vor allem in der Westhälfte Durchzug von Schleierwolken. Höchsttemperaturen 12 bis 16 Grad, im Bergland 8 bis 12 Grad. Mäßiger, zeitweise auch frischer und stark böiger Südostwind.<br />
      In der Nacht zum Samstag im Osten meist gering bewölkt, im Westen dichtere Wolkenfelder aber allenfalls westlich des Rheins ein paar Tropfen Regen. Sonst niederschlagsfrei. Tiefsttemperaturen zwischen 7 Grad am Rhein und 2 Grad in Ostwestfalen, in Tallagen des Sauerlandes leichter Frost bis -3 Grad. Im Bergland weiterhin stark böiger Südostwind.</p><p>Am Samstag in Ostwestfalen oft sonnig, am Niederrhein hingegen zeitweise stärker bewölkt. Dort weiterhin ein paar Regentropfen nicht ausgeschlossen, sonst aber weiterhin trocken. Erwärmung auf 12 bis 15 Grad, im höheren Bergland 7 bis 10 Grad. Mäßiger, in Böen teils frischer Wind um Süd. <br />
      In der Nacht zum Sonntag in der Westhälfte wechselnd bewölkt, in der Osthälfte gering bewölkt oder klar. Niederschlagsfrei. Abkühlung auf 6 bis 1 Grad, im Bergland bis -3 Grad.</p><p>Letzte Aktualisierung: 10.03.2022, 06.58 Uhr Lokalzeit. Textquelle: Deutscher Wetterdienst</p>
      
      Homoran 1 Reply Last reply Reply Quote 0
      • Homoran
        Homoran Global Moderator Administrators @dirk_1930 last edited by

        @dirk_1930 col-12">[^>]+>[^>]+>([\w\W]+)<\/p><
        allerdings ohne Gewähr, da immer noch kein UTF-8

        dirk_1930 1 Reply Last reply Reply Quote 0
        • dirk_1930
          dirk_1930 @Homoran last edited by

          @homoran
          Hab es jetzt mal als .html abgespeichert.
          col-12 wählt zu viel aus. Wäre da die <h2 id="weather-report">Wetterbericht und Warnungen</h2> besser geeignet?

          Quelltext_als_Html.html

          Homoran 1 Reply Last reply Reply Quote 0
          • Homoran
            Homoran Global Moderator Administrators @dirk_1930 last edited by Homoran

            @dirk_1930 sagte in Parser Adapter liefert kein Ergebniss:

            col-12 wählt zu viel aus.

            habs gerade auch gesehen:
            letzter Stand:
            und Warnungen[^>]+>[^>]+>[^>]+>[^>]+>([\w\W]+)<\/p><

            @dirk_1930 sagte in Parser Adapter liefert kein Ergebniss:

            Quelltext_als_Html.html

            nutzt nix, der macht die Seite auf 🙂

            dirk_1930 1 Reply Last reply Reply Quote 0
            • dirk_1930
              dirk_1930 @Homoran last edited by

              @homoran
              SUPER!!! ja... das geht jetzt.

              Ich verstehe trotzdem noch nicht, wie du dich da durchhangelst...
              Du fängst bei "und Warnungen" an und gehst von da aus jedes schließende Element durch bis du zu dem Text kommst?

              Homoran 1 Reply Last reply Reply Quote 0
              • Homoran
                Homoran Global Moderator Administrators @dirk_1930 last edited by Homoran

                @dirk_1930 sagte in Parser Adapter liefert kein Ergebniss:

                Du fängst bei "und Warnungen" an und gehst von da aus jedes schließende Element durch bis du zu dem Text kommst?

                jepp

                und hier die Infos, die du dazu bei regex101.com bekommst:
                Wetter_koeln.png

                unten rechts gibt es die Quick reference und oben rechts wird der RegEx zerlegt

                1 Reply Last reply Reply Quote 0
                • dirk_1930
                  dirk_1930 last edited by

                  @homoran

                  verstehe ich das richtig...?

                  und Warnungen</h2><div class="col-12"><><strong>

                  Also 4 X [^>]

                  Homoran 1 Reply Last reply Reply Quote 0
                  • Homoran
                    Homoran Global Moderator Administrators @dirk_1930 last edited by Homoran

                    @dirk_1930 sagte in Parser Adapter liefert kein Ergebniss:

                    Also 4 X [^>]

                    jepp, aber mit zusätzlichem + für beliebig viele Zeichen, die nicht > sind und dann ein >, da dieses Zeichen ja im Befehl davor ausgeschlossen ist

                    die roten Markierungen betreffen aber die schließende Spitze Klammer, oder?

                    dirk_1930 1 Reply Last reply Reply Quote 0
                    • dirk_1930
                      dirk_1930 @Homoran last edited by

                      @homoran
                      ich hatte mich an deiner Sequenz orientiert bis ich dann am p Tag ankomme. Die Farbe sollte nur die Anzahl der Schritte markieren

                      Homoran 1 Reply Last reply Reply Quote 0
                      • Homoran
                        Homoran Global Moderator Administrators @dirk_1930 last edited by

                        @dirk_1930 sagte in Parser Adapter liefert kein Ergebniss:

                        Die Farbe sollte nur die Anzahl der Schritte markieren

                        dann passt es

                        dirk_1930 1 Reply Last reply Reply Quote 0
                        • dirk_1930
                          dirk_1930 @Homoran last edited by

                          @homoran
                          Ich hoffe ich nerve nicht...

                          Soweit konnte ich bisher mehrere zusätzliche Werte auslesen. Jetzt scheitere ich erneut an folgendem...

                          <div class="times-rise-set">
                          <div title="Sonnenaufgang">
                          <span role="img" aria-label="Sonnenaufgang">▲</span> 06:55</div>
                          <div title="Sonnenuntergang">
                          <span role="img" aria-label="Sonnenuntergang">▼</span> 18:27</div>
                          </div>
                          </div>
                          <div class="moon">
                          <div class="moon-icon" title="Erstes Viertel (90.7°)">
                          

                          Ich möchte die Werte für Sonnenaufgang, -untergang und Mondphase auslesen.

                          Mit dem Befehl

                          aria-label="Sonnenaufgang">+[^>]+[^>]>+[^>]([\w\W]+)
                          

                          komme ich bis hinter das schließende span Tag, allerdings schaffe ich es nicht nur die 06:55 auszuwählen.

                          Homoran OliverIO 2 Replies Last reply Reply Quote 0
                          • Homoran
                            Homoran Global Moderator Administrators @dirk_1930 last edited by Homoran

                            @dirk_1930 sagte in Parser Adapter liefert kein Ergebniss:

                            Ich hoffe ich nerve nicht...

                            nööö, eigentlich nicht, habe nur gerade alles gelöscht 😞

                            @dirk_1930 sagte in Parser Adapter liefert kein Ergebniss:

                            Ich möchte die Werte für Sonnenaufgang, -untergang und Mondphase auslesen.

                            sollte bei dir in den Objekten stehen. Habe es gerade versucht zu finden und nur bei Shuttercontrol gefunden 😞

                            stay tuned

                            naufgang[^n]+n> ([\d:]+)

                            nuntergang[^n]+n> ([\d:]+)

                            Was genau wolltest du mit deinem RegEx erreichen?

                            dirk_1930 2 Replies Last reply Reply Quote 0
                            • dirk_1930
                              dirk_1930 @Homoran last edited by

                              @homoran

                              habs hinbekommen

                              aria-label="Sonnenaufgang">+[^>]+[^>]>+[^>]([^<]+)
                              

                              ohh mann 🤕

                              Homoran 1 Reply Last reply Reply Quote 0
                              • OliverIO
                                OliverIO @dirk_1930 last edited by OliverIO

                                der doppelpunkt ist kein \w zeichen
                                ein endetag zeichen und ein leerzeichen steht da auch noch
                                und ein plus als multiplier war zu viel. hat zwar nicht geschadet, da das in html nie vorkommen kann

                                aria-label="Sonnenaufgang">[^>]+>\s([\w\:]+)
                                
                                1 Reply Last reply Reply Quote 0
                                • dirk_1930
                                  dirk_1930 @Homoran last edited by

                                  @homoran said in Parser Adapter liefert kein Ergebniss:

                                  @dirk_1930 sagte in Parser Adapter liefert kein Ergebniss:

                                  Ich hoffe ich nerve nicht...

                                  nööö, eigentlich nicht, habe nur gerade alles gelöscht 😞

                                  @dirk_1930 sagte in Parser Adapter liefert kein Ergebniss:

                                  Ich möchte die Werte für Sonnenaufgang, -untergang und Mondphase auslesen.

                                  sollte bei dir in den Objekten stehen. Habe es gerade versucht zu finden und nur bei Shuttercontrol gefunden 😞

                                  stay tuned

                                  naufgang[^n]+n> ([\d:]+)

                                  nuntergang[^n]+n> ([\d:]+)

                                  Was genau wolltest du mit deinem RegEx erreichen?

                                  Ich nutze die Meteoblue API und da fehlen halt noch ein paar zusätzliche Datenpunkte. Ich hatte, bzw. habe den Ehrgeiz mich da durchzuwühlen.
                                  Meine Kenntnisse in HTML und JS sind noch nicht so dolle, aber dank Eurer tollen Hilfe, komme ich immer etwas weiter 👍

                                  1 Reply Last reply Reply Quote 0
                                  • Homoran
                                    Homoran Global Moderator Administrators @dirk_1930 last edited by

                                    @dirk_1930 sagte in Parser Adapter liefert kein Ergebniss:

                                    habs hinbekommen

                                    hab es oben editiert!
                                    Ich persönlich mache es immer so kurz und eindeutig wie möglich
                                    Der Sprung zu den > ist hier aufwändiger. Ich suche dann immer nach dem dichtesten eindeutigen Zeichen am Suchergebnis, hier das n von span
                                    Dann hast du mit dem + hinter Sonnenaufgang"> nichts was sich vervielfältigen kann
                                    Auch die Word/NoWord Befehle sind nicht eindeutig, es handelt sich nur um Ziffern \d und den Doppelpunkt

                                    dirk_1930 1 Reply Last reply Reply Quote 0
                                    • dirk_1930
                                      dirk_1930 @Homoran last edited by

                                      @liv-in-sky

                                      Du hattest in einem vorherigen Post eine Lösung in cheerio geschrieben.
                                      Würden meine daten sich auf diese Weise auch auslesen lassen, bzw. kann ich anhand des vollständigen XPath darauf zugreifen?

                                      liv-in-sky 1 Reply Last reply Reply Quote 0
                                      • liv-in-sky
                                        liv-in-sky @dirk_1930 last edited by

                                        @dirk_1930

                                        teste mal dieses script - wird beim start einmal aufgerufen - du musst axios und cheerio im javascript instanz setting unter zusätzliche npm module einfügen

                                        im log siehst du dann alle möglichen ausgaben

                                        das ist die ausgabe eines arrays , das einfach hintereinander ausgegeben wird

                                        wenn du mir dann sagst, was du genau haben willst - kann ich MORGEN das script weitermachen

                                        
                                        const cheerio = require('cheerio');
                                        const request = require('request');
                                        const axios=require('axios');
                                        let jsonArr;
                                        let myDPunkt="0_userdata.0.CONTROL-OWN.TABELLEN.Vilsbiburg"
                                        
                                        let mySchedule1="  33 */8 * * * "; // alle 8 stunden bei minute 33
                                        holeDaten();
                                        // schedule(mySchedule1,  function () {
                                         let myVarVar=mathRandomInt(10, 300);
                                        // log("startet ");
                                         setTimeout(function() {
                                           //  log("jetzt "+myVarVar);
                                             holeDaten();
                                        
                                         }, myVarVar*1000);
                                        // });
                                        
                                        
                                        function mathRandomInt(a, b) {
                                         if (a > b) {
                                           // Swap a and b to ensure a is smaller.
                                           var c = a;
                                           a = b;
                                           b = c;
                                         }
                                         return Math.floor(Math.random() * (b - a + 1) + a);
                                        }
                                        
                                        async function holeDaten() { 
                                           log("jetzt")
                                           await axios.get(encodeURI('https://www.meteoblue.com/de/wetter/woche/köln_deutschland_2886242'), {
                                                           headers: { 'User-Agent':`Mozilla/5.0 (X11; CrOS x86_64 8172.45.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.64 Safari/537.36` }
                                        }).then((result) => {
                                                // log(result.data);log(result)
                                                    const $ = cheerio.load(result.data)
                                                                      const list5 = $('*')
                                                                                         .find('.col-12')                 //find("[class*=re]")  //find('.table_wert_1a')
                                                                                         .toArray()
                                                                                         .map(element => { return $(element).text()}); log(list5.length +"---"+list5)
                                                                                         for (let z=0;z<list5.length;z++){log(list5[z])}
                                        
                                                                      let dayArr=['Mo','Di','Mi','Do','Fr','Sa','So'];
                                                                       jsonArr=[];
                                                                       let i=0
                                                              //        for(let i=0;i<5;i++) {//log(list5[i])
                                                                         
                                                                                                                          jsonArr.push({
                                                                                                                              "temp":    list5[i],
                                                                                                                              "min_temp_heute":  list5[i+1],
                                                                                                                              "max_temp_heute": list5[i+2],
                                                                                                                              "luftfeucht": list5[i+3],
                                                                                                                              "min_luftfeucht_heute": list5[i+4]
                                                                                                                          })
                                              
                                        //} 
                                        //log(JSON.stringify(jsonArr))   //hier in dp schreiben
                                        //log("jetzt "+myVarVar);
                                        setState(myDPunkt,JSON.stringify(jsonArr))
                                        
                                               }).catch((error) => {
                                                   return error;
                                               })}
                                        
                                        
                                        
                                        
                                        

                                        dirk_1930 1 Reply Last reply Reply Quote 0
                                        • dirk_1930
                                          dirk_1930 @liv-in-sky last edited by

                                          @liv-in-sky
                                          Danke für dein Angebot das Script anzupassen.

                                          Ich habe einen Screenshot von den Log gemacht und die gewünschten Daten markiert. Hoffe das ist OK so...
                                          Zusätzlich habe ich einzelne Werte mit gelb unterstrichen. Können die jeweils einzeln extrahiert werden?

                                          Freue mich auf deinen Vorschlag 🙂

                                          cheerio_1.JPG

                                          liv-in-sky 1 Reply Last reply Reply Quote 0
                                          • liv-in-sky
                                            liv-in-sky @dirk_1930 last edited by

                                            @dirk_1930

                                            probiere mal das - datenpunkte unter 0_userdata - werden angelegt

                                            dann müssen wir nur noch wegen dem abfrageinterval was machen - wie oft willst du das abfragen - nicht zu oft, manche seiten mögen das nicht, wenn dauernd solche fragen kommen

                                            
                                            const cheerio = require('cheerio');
                                            const request = require('request');
                                            const axios=require('axios');
                                            let jsonArr;
                                            let myDPunkt="0_userdata.0.CONTROL-OWN.TABELLEN.Vilsbiburg"
                                            
                                            let mySchedule1="  33 */8 * * * "; // alle 8 stunden bei minute 33
                                            
                                            doStuff()
                                            holeDaten();
                                            // schedule(mySchedule1,  function () {
                                             let myVarVar=mathRandomInt(10, 300);
                                            // log("startet ");
                                             setTimeout(function() {
                                               //  log("jetzt "+myVarVar);
                                                 holeDaten();
                                            
                                             }, myVarVar*1000);
                                            // });
                                            
                                            
                                            function mathRandomInt(a, b) {
                                             if (a > b) {
                                               // Swap a and b to ensure a is smaller.
                                               var c = a;
                                               a = b;
                                               b = c;
                                             }
                                             return Math.floor(Math.random() * (b - a + 1) + a);
                                            }
                                            
                                            async function holeDaten() { 
                                               log("jetzt")
                                               await axios.get(encodeURI('https://www.meteoblue.com/de/wetter/woche/köln_deutschland_2886242'), {
                                                               headers: { 'User-Agent':`Mozilla/5.0 (X11; CrOS x86_64 8172.45.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.64 Safari/537.36` }
                                            }).then((result) => {
                                                    // log(result.data);log(result)
                                                        const $ = cheerio.load(result.data)
                                                                          const list5 = $('*')
                                                                                             .find('.col-12')                 //find("[class*=re]")  //find('.table_wert_1a')
                                                                                             .toArray()
                                                                                             .map(element => { return $(element).text()}); //log(list5.length +"---"+list5)
                                                                                           //  for (let z=0;z<list5.length;z++){log(list5[z])}
                                            
                                                                    //  log(list5[5])
                                                  
                                            //} 
                                            //log(JSON.stringify(jsonArr))   //hier in dp schreiben
                                            //log("jetzt "+myVarVar);
                                            //log(list5[5].replace(/ /gm,'').replace(/\n/gm,'').replace(/▲/g,'').replace(/▼/g,''))
                                            let helpingHand=list5[5].replace(/ /gm,'').replace(/\n/gm,'').replace(/▲/g,'').replace(/▼/g,'')
                                            setState("0_userdata.0.KoelnWetter.BerichtLang",list5[10])
                                            setState("0_userdata.0.KoelnWetter.BerichtKurz",list5[4].replace('Wetterbericht für Köln ',''))
                                            setState("0_userdata.0.KoelnWetter.UV2Start",helpingHand.replace(/^.*?([0-9][0-9]:[0-9][0-9]).*/,"$1"))
                                            setState("0_userdata.0.KoelnWetter.UV2End",helpingHand.replace(/^.*?[0-9][0-9]:[0-9][0-9]([0-9][0-9]:[0-9][0-9]).*/gm,'$1')) //^UV2▲[0-9][0-9]:[0-9][0-9]▼([0-9][0-9]:[0-9][0-9])
                                            setState("0_userdata.0.KoelnWetter.Mond2Start",helpingHand.replace(/^.*?\)([0-9][0-9]:[0-9][0-9]).*/gm,'$1'))
                                            setState("0_userdata.0.KoelnWetter.Mond2End",helpingHand.replace(/^.*?\)[0-9][0-9]:[0-9][0-9]([0-9][0-9]:[0-9][0-9]).*/gm,'$1'))
                                            setState("0_userdata.0.KoelnWetter.MondGrad",helpingHand.replace(/^.*?\((.*?)\).*/gm,'$1'))
                                            
                                                   }).catch((error) => {
                                                       return error;
                                                   })}
                                            
                                            async function doStuff() {
                                              
                                               
                                                if (!(await existsStateAsync("0_userdata.0.KoelnWetter.BerichtLang"))) {
                                                   await createStateAsync("0_userdata.0.KoelnWetter.BerichtLang",{type: "string", name: "Bericht ausführlich", role: "value", read: true, write: true, } ); }
                                                if (!(await existsStateAsync("0_userdata.0.KoelnWetter.BerichtKurz"))) {
                                                   await createStateAsync("0_userdata.0.KoelnWetter.BerichtKurz",{type: "string", name: "Bericht ausführlich", role: "value", read: true, write: true, } ); }
                                                if (!(await existsStateAsync("0_userdata.0.KoelnWetter.UV2Start"))) {
                                                   await createStateAsync("0_userdata.0.KoelnWetter.UV2Start",{type: "string", name: "UV2Start", role: "value", read: true, write: true, } ); } 
                                                if (!(await existsStateAsync("0_userdata.0.KoelnWetter.UV2End"))) {
                                                   await createStateAsync("0_userdata.0.KoelnWetter.UV2End",{type: "string", name: "UV2End", role: "value", read: true, write: true, } ); }           
                                                if (!(await existsStateAsync("0_userdata.0.KoelnWetter.Mond2End"))) {
                                                   await createStateAsync("0_userdata.0.KoelnWetter.Mond2End",{type: "string", name: "Mond2End", role: "value", read: true, write: true, } ); }
                                                if (!(await existsStateAsync("0_userdata.0.KoelnWetter.Mond2Start"))) {
                                                   await createStateAsync("0_userdata.0.KoelnWetter.Mond2Start",{type: "string", name: "Mond2Start", role: "value", read: true, write: true, } ); }  
                                                if (!(await existsStateAsync("0_userdata.0.KoelnWetter.MondGrad"))) {
                                                   await createStateAsync("0_userdata.0.KoelnWetter.MondGrad",{type: "string", name: "MondGrad", role: "value", read: true, write: true, } ); }      
                                            
                                            
                                            
                                            }
                                            
                                            ![Image 2.png](/assets/uploads/files/1646986580738-image-2.png) 
                                            
                                            
                                            
                                            
                                            
                                            
                                            

                                            Image 2.png

                                            dirk_1930 1 Reply Last reply Reply Quote 0
                                            • First post
                                              Last post

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate

                                            956
                                            Online

                                            31.9k
                                            Users

                                            80.1k
                                            Topics

                                            1.3m
                                            Posts

                                            4
                                            44
                                            1734
                                            Loading More Posts
                                            • Oldest to Newest
                                            • Newest to Oldest
                                            • Most Votes
                                            Reply
                                            • Reply as topic
                                            Log in to reply
                                            Community
                                            Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                                            The ioBroker Community 2014-2023
                                            logo