Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. Parser: TV-Sender Fußball [Closed]

    NEWS

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

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    Parser: TV-Sender Fußball [Closed]

    This topic has been deleted. Only users with topic management privileges can see it.
    • A
      adsfa last edited by adsfa

      Hi zusammen, ich würde gerne parsen auf welchem TV Sender ich das Spiel meines Lieblingsverein verfolgen kann.
      Dafür würde ich gerne diese Webseite nutzen: https://www.fussball-im-tv.com/team/colonia

      Unten steht der Satz:

      Nächten Spiel wird <strong>RB Leipzig - FC Köln</strong> sein, die am <strong>Samstag, 13. August 2022 um 15:30</strong> gespielt wird, die von DAZN, Sky Sport Bundesliga 3 gesendet wird.<br/>
      

      Ich würde daraus gerne parsen:
      "RB Leipzig - FC Köln</strong> sein, die am <strong>Samstag, 13. August 2022 um 15:30</strong> gespielt wird, die von DAZN, Sky Sport Bundesliga 3".
      Damit hätte ich alle relevanten Informationen. Wie stelle ich das am besten an? Und ist es möglich die unnötigen Satzteile herauszulöschen?
      Das ideale Ergebnis wäre für mich etwas wie:

      RB Leipzig - FC Köln Samstag, 13. August 2022 um 15:30 DAZN, Sky Sport Bundesliga 3
      

      Hiermit würde es theoretisch klappen, jedoch gibt es oft auch nur einen Sender und dann macht das Komma Probleme.

      die von [a-zA-Z]+,(\s([a-zA-Z]+\s)+)3 gesendet wird\.
      

      Vielen Dank und ein schönes Wochenende

      Kompletter Seitenquelltext:
      [spoiler] Super spoiler text here [/spoiler]

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

        @adsfa bitte nochmals genau was du haben willst und den vollständigen Quelltext der Seite in code-tags und ggf. spoiler.
        Wäre doch gelacht wenn du Hennes nicht die Daumen drücken könntest

        A 1 Reply Last reply Reply Quote 1
        • A
          adsfa @Homoran last edited by adsfa

          @homoran
          Danke für deine schnelle Antwort 🙂
          Leider ist der Code zu lang zum einfügen, sagt das Forum.
          Ich hoffe, das ist der relevante Teil:

          url=https://www.fussball-im-tv.com/team/colonia" style="cursor: pointer!important; font-size:12px !important;color: #a5a5a5 ;float:right;text-decoration:none !important;font-family:arial !important;line-height:normal;">report this ad</span></span></span> <div class="pAside01">  </div> <div class="pAside02">  </div> <div class="pAside03">  </div> <span id="ezoic-pub-ad-placeholder-133" class="ezoic-adpicker-ad"></span></aside> </main> <section class="informacionGeneral"> <p> In diesem Moment, <strong> gibt es 27 live Spiele im TV</strong> von 1 unterschiedliche Wettbewerbe. Nächten Spiel wird <strong>RB Leipzig - FC Köln</strong> sein, die am <strong>Samstag, 13. August 2022 um 15:30</strong> gespielt wird, die von DAZN, Sky Sport Bundesliga 3 gesendet wird.<br/><br/>Mehr Information in der <strong><a href="https://www.fc-koeln.de/" target="_blank"> FC Köln Web
          
          Homoran 2 Replies Last reply Reply Quote 0
          • Homoran
            Homoran Global Moderator Administrators @adsfa last edited by

            @adsfa sagte in Parser: TV-Sender Fußball:

            das ist der relevante Teil:

            nutzt nichts, wenn im anderen Teil der RegEx noch was finden würde.

            und was ist mit

            @homoran sagte in Parser: TV-Sender Fußball:

            bitte nochmals genau was du haben willst

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

              @adsfa wird wahrscheinlich mit Javascript besser gehen. mit dem Parsen für den Parser Adapter bekomme ichbzwar jetzt die Begegnung mit wird <strong>(.+?Köln)<\/str aber wenn die Kölner Heimspiel gaben wird das nix.
              Auf die Schelle hab ich es am Handy auch nicht allgemeingültig hinbekommen

              1 Reply Last reply Reply Quote 0
              • A
                adsfa last edited by

                @homoran
                Vielen Dank für deine Mühe - wirklich super nett 🙂

                "Bitte nochmals genau was du haben willst" - ich denke Folgendes wäre ideal.

                RB Leipzig - FC Köln | Samstag, 13. August 2022 um 15:30 | DAZN, Sky Sport Bundesliga 3
                

                Die Idee ist die Infos kurz vor Anpfiff über Telegram zu schicken. Dabei fällt mir gerade auf, dass ich dafür noch an iobroker weitergeben muss, wann das Spiel eigentlich ist.
                Das wäre wahrscheinlich mit Javascript einfacher wenn man das Datum weiterverarbeiten kann. Leider habe ich da keine Erfahrung, aber versuche mich über Youtube weiterzubilden 🙂

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

                  @adsfa sagte in Parser: TV-Sender Fußball:

                  aber versuche mich über Youtube weiterzubilden

                  bitte nicht!!!
                  dort tummeln sich viele Scharlatane.

                  warte bis dich hier jemand meldet, der js kann

                  1 Reply Last reply Reply Quote 1
                  • OliverIO
                    OliverIO @adsfa last edited by OliverIO

                    @adsfa

                    hier wäre ein vorschlag:
                    als erstes muss in den einstellungen der javascript instanz noch cheerio als zusätzliches NPM-modul hinzugefügt werden

                    cheerio versucht auf serverebene die befehle von jquery (welches eigentlich nur im browser funktioniert) nachzubilden.
                    dadurch kann man relativ einfach im browser mit rechte maustaste, element untersuchen und dann auf dem element kopieren/selektor die adressierung des elements wählen.
                    der befehl text() dahinter ist nicht schwer zu interpretieren.

                    komplizierter war die kanalliste, da ja hier mehrere einträge sich befinden können. aber durch umwandlung in ein array, dann map und dann wieder join ging das auch.

                    ergebnis im Datenpunk bei mir

                    RB Leipzig - FC Köln | Morgen samstag, 13.08.2022 um  15:30  | DAZN, Sky Sport Bundesliga 3
                    

                    da es einfacher war, werte ich die erste Tabelle aus, leider steht da der wichentag mit kleinen buchstaben drin.

                    const cheerio = require('cheerio');
                    const axios = require('axios');
                    const dp = "0_userdata.0.test1";
                    
                    async function getFussball() {
                        const response = await axios.get('https://www.fussball-im-tv.com/team/colonia');
                        const $ = cheerio.load(response.data);
                        let datum = $('#utcRelativeContent > table:nth-child(1) > tbody > tr.cabeceraTabla > td').text();
                        let uhr = $('#utcRelativeContent > table:nth-child(1) > tbody > tr:nth-child(2) > td.hora').text();
                        let lokal = $('#utcRelativeContent > table:nth-child(1) > tbody > tr:nth-child(2) > td.local > span').text();
                        let visitor = $('#utcRelativeContent > table:nth-child(1) > tbody > tr:nth-child(2) > td.visitante > span').text();
                        let tv = $('#utcRelativeContent > table:nth-child(1) > tbody > tr:nth-child(2) > td.canales > ul li').toArray().map(el=>$(el).text()).join(", ");
                        setState(dp,lokal + " - " + visitor + " | " + datum + " um " + uhr + " | " + tv);
                        //console.log(lokal + " - " + visitor + " | " + datum + " um " + uhr + " | " + tv);
                    }
                    getFussball();
                    
                    

                    aber nicht so oft laufen lassen, so das der Anbieter sich nicht gestört fühlt und dann noch ein wichtiger hinweis aus den nutzungsbedingungen für dich, der sagt das du das nicht darfst. da es aber auf spanisch ist, gilt es wahrscheinlich nicht

                    El Usuario deberá abstenerse de obtener e incluso de intentar obtener los Contenidos empleando para ello medios o procedimientos distintos de los que, según los casos, se hayan puesto a su disposición a este efecto o se hayan indicado a este efecto en las páginas Web donde se encuentren los Contenidos o, en general, de los que se empleen habitualmente en Internet a este efecto siempre que no entrañen un riesgo de daño o inutilización de la Página, y/o de los Contenidos.

                    @Homoran jetzt mach ich ein video draus und lad es nach youtube hoch 😆

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

                      @oliverio dann nehme ich den upvote sofort zurück 😁

                      1 Reply Last reply Reply Quote 1
                      • A
                        adsfa last edited by

                        @oliverio
                        Super! Damit klappt es perfekt!
                        Vielen vielen Dank 🙂

                        1 Reply Last reply Reply Quote 0
                        • A
                          adsfa @OliverIO last edited by adsfa

                          @oliverio Vielen Dank nochmal für das super Script.
                          Ich habe jetzt noch eine weitere Seite geparst und das klappt super, jedoch kriege ich es nicht hin den Preis in eine Zahl umzuwandeln.
                          Hast du ggf. noch einen Tipp für mich :)?

                          parsefloat() und Number() habe ich schon probiert aber es will nicht funktionieren. In meiner Ausgabe steht dann nur "script.js.JavaScript.WebScraper.ESNKreatin: Ausverkauft - 25.90 1"

                          Zudem erhalte ich eine Warnung in log, wenn ich den Datenpunkt von "gemischt" auf "Zahl" ändere.

                          const cheerio = require('cheerio');
                          const axios = require('axios');
                          const dp1 = "0_userdata.0.JS.WebScraper.Shops.ESNCreatin.Ausverkauft";
                          const dp2 = "0_userdata.0.JS.WebScraper.Shops.ESNCreatin.Preis";
                          //createState(dp1, " ");
                          //createState(dp2, " ");
                           
                          async function getESNCreatin() {
                              const response = await axios.get('https://www.fitmart.de/products/esn-ultrapure-creatine-monohydrate-500g?_pos=6&_sid=c08d9931b&_ss=r');
                              const $ = cheerio.load(response.data);
                              let ausverkauft = $('#shopify-section-static-product > section > article > div.product-main > div.product-details > div.product-pricing > span').text();
                              let preis = $('#shopify-section-static-product > section > article > div.product-main > div.product-details > div.product-pricing > div.price.product__price > div.price__current > span').text().replace("€", "").replace(/,/, ".");
                              parseFloat(preis)
                              Number(preis)
                              preis = preis + 1;
                              setState(dp1,ausverkauft);
                              setState(dp2,preis);
                              console.log(ausverkauft + " - " + preis);
                          }
                          getESNCreatin();
                          
                          OliverIO 1 Reply Last reply Reply Quote 0
                          • OliverIO
                            OliverIO @adsfa last edited by

                            @adsfa
                            parseFloat ist eine Funktion die das Ergebnis zurück gibt, daher musst du es auch zuweisen

                            preis = parseFloat(preis);
                            
                            A 2 Replies Last reply Reply Quote 1
                            • A
                              adsfa @OliverIO last edited by

                              @oliverio Super, vielen Dank!! 🙂

                              1 Reply Last reply Reply Quote 0
                              • A
                                adsfa @OliverIO last edited by adsfa

                                @oliverio
                                Ich hätte nochmal eine Frage zu einer anderen Webseite bei der ich es leider nicht hinbekomme den Preis zu erfragen. Wenn man die Seite öffnet erscheint der Preis erst nach 1 Sekunde, evtl. liegt es daran?
                                Leider kommt ein leeres Ergebnis raus.

                                Link: https://www.thenorthface.de/shop/de/tnf-de/carto-triclimate-jacke-fuer-damen-5iwj

                                const cheerio = require('cheerio');
                                const axios = require('axios');
                                
                                async function Scrape() {
                                    const response = await axios.get('https://www.thenorthface.de/shop/de/tnf-de/carto-triclimate-jacke-fuer-damen-5iwj');
                                    const $ = cheerio.load(response.data);
                                    let preis = $('#product-info > div.product-content-info-price.product-price.product-price-js > span.product-content-info-offer-price.offer-price.offer-price-js.product-price-amount-js').text();
                                
                                    console.log(preis);
                                }
                                Scrape();
                                

                                Das ist der JS-Path und die Abänderung (ich lösche alles vor der Klammer und ändere die Anführungszeichen von " in '.

                                document.querySelector("#product-info > div.product-content-info-price.product-price.product-price-js > span.product-content-info-offer-price.offer-price.offer-price-js.product-price-amount-js")
                                '#product-info > div.product-content-info-price.product-price.product-price-js > span.product-content-info-offer-price.offer-price.offer-price-js.product-price-amount-js'
                                
                                OliverIO 1 Reply Last reply Reply Quote 0
                                • OliverIO
                                  OliverIO @adsfa last edited by

                                  @adsfa
                                  sorry, hat ein wenig gedauert.

                                  dein skript hat deswegen kein ergebnis, weil der preis in der datei gar nicht enthalten ist, sondern nur ein platzhalter, der später dann durch javascript gefüllt wird.
                                  der wirkliche preis wird von der seite dynamisch abgerufen und ist in dieser datei enthalten

                                  https://www.thenorthface.de/webapp/wcs/stores/servlet/VFAjaxItemPricingView?requestype=ajax&storeId=7007&langId=-3&catalogId=13505&productId=1144743&requesttype=ajax

                                  da wird dann direkt ein json objekt zurückgegeben, das du direkt auswerten kanns.
                                  ob die abfrage allerdings noch zusätzlich gesichert ist, so das man das nicht strukturiert per skript abrufen kann, hab ich nicht ausprobiert

                                  A 1 Reply Last reply Reply Quote 1
                                  • A
                                    adsfa @OliverIO last edited by

                                    @oliverio Vielen Dank! Danke das habe ich so ungefähr verstanden :).
                                    Wie hast du den Link gefunden?

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

                                      @adsfa
                                      Mir den Developer Tools des browsers geschaut was die Seite da noch lädt.

                                      A 1 Reply Last reply Reply Quote 1
                                      • A
                                        adsfa @OliverIO last edited by

                                        @oliverio Vielen Dank! Ich hätte nochmal eine Frage, falls das ok ist.

                                        Wie kann ich auf ein Element klicken?
                                        Ich habe z.B. diese Adidas Seite und würde gerne auf die Schuhgröße klicken. Geht das?

                                        const cheerio = require('cheerio');
                                        const axios = require('axios');
                                        
                                        async function Scrape() {
                                            const response = await axios.get('https://www.adidas.de/adilette-aqua-slides/F35550.html');
                                            const $ = cheerio.load(response.data);
                                            let preis  = $('#main-content > div.sidebar-wrapper___3uF26 > div.sidebar___29cCJ > div > div.product-price___2Mip5.gl-vspace > div.price___Z74_w.price___35NVI.gl-flex-col > div > div > div').text();
                                            let lieferzeit = $('#main-content > div.sidebar-wrapper___3uF26 > div.sidebar___29cCJ > section > div.gl-callout.backorder-callout___Sa5vJ > div > h5').text();
                                        
                                            console.log(preis);
                                            console.log(lieferzeit );
                                        }
                                        Scrape();
                                        

                                        Vielen Dank 🙂

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

                                          @adsfa
                                          theoretisch ja.
                                          allerdings wird beim klick auf die schuhgröße eine kauderwelsch adresse aufgerufen
                                          https://www.adidas.de/Gnb58ttYk1PE/cL/2Crmr3uBA4/ii1wmh7OOp/ITULbHd7Rgg/aUMoS/HsEYgsB

                                          in diesem kauderwelch sind sicherlich alle produktparameter hinein verschlüsselt.
                                          um diesen link zu ermitteln müsste man zunächst den code analysieren.
                                          Das ist ziemlich aufwändig.

                                          Andere Alternative wäre mit pupeteer die adresse aufzurufen und dann anweisungen zu geben ein bestimmtes element zu laden und aus der seite dann den text extrahieren.
                                          Auch das ist aufwändig, da im hintergrund ein kompletter browser geladen wird.

                                          im obigen beispiel werden ja nur die html-daten geladen und mittels einer jquery ähnlichen bibliothek ausgewertet. aber es wird kein browser ausgeführt.

                                          beide methoden funktionieren nur solange bis die seite in seiner struktur geändert wird, dann muss man das wieder neu aufbauen.

                                          A 1 Reply Last reply Reply Quote 0
                                          • A
                                            adsfa @OliverIO last edited by

                                            @oliverio Vielen Dank für die ausführliche Beschreibung.
                                            Dann schaue ich mir Pupeteer mal genauer an und Selenium über Python steht auch auf meiner Liste.

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

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate

                                            489
                                            Online

                                            31.7k
                                            Users

                                            79.6k
                                            Topics

                                            1.3m
                                            Posts

                                            4
                                            25
                                            1354
                                            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