Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. Parser: DSL Vergleich

    NEWS

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

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    Parser: DSL Vergleich

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

      Hi zusammen, ich würde gerne mithilfe des iobroker den Preis des günstigsten DSL Anbieters parsen.
      Dafür wollte ich den Code von @OliverIO nutzen. Leider bekomme ich immer "NaN" ausgewertet.
      Wisst ihr woran das liegen könnte und was ich falsch mache?

      const cheerio = require('cheerio');
      const axios = require('axios');
      async function Scrape() {
          const response = await axios.get('https://dsl.tarifdetektiv.de/?street=Hauptstr.&city=Berlin&sort=calculated_price&connection-types=dsl,glasfaser,lte&speed=100&download-speed=100&sort_direction=asc&postal-code=10827&house-number=11');
          const $ = cheerio.load(response.data);
          let preis  = $('#tariff-19 > div > div > div.p-2.pt-1.col-12.col-xl-5.benefits-box > div.benefits.benefits-extra.row > div.d-block.col-12.col-xl-5.d-flex.row.pr-0.price-button-section > div > div > div > a > div > span.value.accent-color').text();
          preis = parseFloat(preis)
          console.log(preis);
      }
      Scrape();
          
      

      Ziel ist einfach immer den günstigsten Preis zu tracken.
      9cc67e1a-2d71-469b-af9e-15ac21c3f41f-image.png
      Vielen Dank für einen Hinweis 🙂

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

        @adsfa parsefloat erwartet eine Zahl (Nummer). NaN bedeutet Not a Number, also dass da entweder keine Zahl drin ist, oder stolpert z.B. über das Komma oder Eurozeichen.

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

          @peterfido Danke dir. Habe es mal ohne probiert. Dann ist das Ergebnis leer.

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

            @adsfa
            Was steht in Preis drin nach Zeile 6?
            Wahrscheinlich steht da nix drin.
            Du musst auch schauen ob beim Abruf der Seite der
            Betrag überhaupt enthalten ist oder durch JavaScript dynamisch eingetragen wird. Da hilft dieser Code dann nicht.

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

              @oliverio Danke dir. Wie prüfe ich, ob ein der Preis dynamisch eingetragen wird?

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

                @adsfa
                Du schaust dir genau den HTML Inhalt an, der über das Skript geladen wird
                Denke daran, der Browser wertet ja dieses HTML aus und lädt noch alle Bilder, CSS, alle Java Skripte, interpretiert diese und führt die dann auch aus. Das macht Cheerio nicht.
                Das reine unveränderte HTML, kannst du im Browser Kontextmenü über „Seiten Inhalt anzeigen“ dir anschauen.
                Alternativ über die Developer Tools des Browsers (F12) im Netzwerkreiter, genau diese Datei suchen und den Inhalt anzeigen lassen.
                Genau in diesem Reiter kannst du eventuell den wird suchen, falls ihr in der HTML nicht enthalten ist und schauen, wie eher übertragen wird.
                Wenn du Glück hast, liegt der Wert nicht kryptisch oder gar verschlüsselt vor.

                haus-automatisierung 1 Reply Last reply Reply Quote 1
                • haus-automatisierung
                  haus-automatisierung Developer Most Active @OliverIO last edited by

                  @oliverio Das ganze scheinbar per XHR nachgeladen. Und die Daten liegen als JSON vor. Müsste man nur gucken, ob die URL immer genau die gleiche ist. Dann wäre es super einfach und man müsste nichtmal HTML parsen.

                  Da ist nur ein API-Key in der URL - wer weiß wie lange der gültig ist 🙂

                  curl 'https://api.tarifdetektiv.de/api/tariff?areaCode=&postalCode=10827&cityId=3505&streetId=1249197&houseNumber=11&houseNumberAffix=&downloadSpeed=100&flatRates=tripleplay_internet&remainingContractTime=less_than_one_month&currentContract=not-set&youngPeople=yes&minimumContractTime=24&speedThrottling=no-matter&connectionTypes=dsl%2Cglasfaser%2Clte&extraOptions=&formerProvider=&resultsOffset=0&sort=calculated_price&sort_direction=asc&partnerId=1&apiKey=625796b5-9d26-4db1-8e7d-31ce3a5949f5'
                  

                  Screenshot 2024-02-27 at 11.56.32.png

                  OliverIO 1 Reply Last reply Reply Quote 1
                  • OliverIO
                    OliverIO @haus-automatisierung last edited by

                    @haus-automatisierung
                    Ja, das ist immer das Problem, wenn die Anbieter ihre Daten schützen wollen
                    Generell wäre es auch möglich, in API Key herauszufinden, da ja das Java Skript sich den auch holen muss(falls er nicht fix definiert ist).

                    Aber da kommt man in den aufwändigen Bereich, da man alles re-engineeren muss.

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

                    Support us

                    ioBroker
                    Community Adapters
                    Donate

                    1.0k
                    Online

                    31.7k
                    Users

                    79.7k
                    Topics

                    1.3m
                    Posts

                    5
                    8
                    361
                    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