NEWS
Parser: DSL Vergleich
-
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.
Vielen Dank für einen Hinweis -
@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.
-
@peterfido Danke dir. Habe es mal ohne probiert. Dann ist das Ergebnis leer.
-
@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. -
@oliverio Danke dir. Wie prüfe ich, ob ein der Preis dynamisch eingetragen wird?
-
@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. -
@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¤tContract=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'
-
@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.