Pelletpreise mittels Multiscrapper

Ich suche nach einer Möglichkeit, die aktuellen Pelletpreise in HA anzuzeigen und Preisentwicklung über das Jahr grafisch darzustellen. Leider habe ich keinen Webservice wie für Benzinpreise gefunden. Die einzige Möglichkeit, die ich sehe mittelt der Integration Multiscrapper auf der Seite https://www.heizpellets24.de die Preise für die Region abzufragen.

Mittels der Multiscrapper Integration kann man auch Formulare (z.B. zum Login) senden und dann mittels CSS Selector die Daten auslesen. Allerdings weiß ich nicht, ob dies auch für die o.g. geht. Der Submit-Button auf der Seit ist kein Button, sondern ein Element was auf die selbe Seite referenziert.

Ich habe zumindest schon mal versucht die komplette URL nach der Abfrage aus dem Browser als “resource” für die Integration zu verwenden. Dann habe ich als Antwort erhalten, dass eine Abfrage gemacht werden muss.

action: multiscrape.scrape
data:
  name: HA scraper
  resource: https://www.heizpellets24.de/holzpellets-sackware/angebotsliste?zipCode=76857&amount=1&stations=1&product=23&options=229,248,-41,244,468&ap=0&pcert=4,2,6,1
  sensor:
    - unique_id: pellet_price
      name: Pellet Preis
      select: "#offer-list-page"

Antwort:

pellet_price:
  value: |-
    Spinning  
            14:43 Uhr • 14.10.24
           
              Kein passendes Angebot gefunden
              
          Preisalarm
           Bitte überprüfen Sie Ihre Auswahl 

Hat jemand eine Idee, ob eine Abfrage über diese Seite funktionieren würde bzw. kann mir einen Tipp geben, wie ich die Formularabfrage einbauen könnte? Oder weiß zufällig jemand eine Lösung, aktuelle Pelletpreise darzustellen?

Ich hatte das Gleiche vor wie du und habe es erst einmal aufgegeben. Wie es aussieht, werden die Inhalte dynamisch per JS nachgeladen. Deswegen scheitern die normalen Scraper.
Falls es da eine Lösung gibt, wäre ich auch dankbar :slight_smile:

Wenn es euch als REST-Sensor reicht, dann so:

rest:
    - resource: https://www.heizpellets24.de/api/site/1/prices/best?amount=1&productId=23&zipCode=76857
      sensor: 
        name: Pelletpreis
        unique_id: pelletpreis
        value_template: "{{ (( value_json.Price|float (0)) * 0.975) |round(2)  }}" 
        unit_of_measurement: €
        json_attributes:
          - Change  # 'Preisänderung zur Vorwoche
          - DateTime  # 'Datum und Uhrzeit
          - Price # Preis je 1000 kg

Wobei im Template von 65 Säcken â 15kg je Palette ausgegangen wird!

1 „Gefällt mir“

Super, funktioniert. Vielen Dank.

Kannst du mir noch sagen, wo ich das einbauen muss?
Wenn ich das in den Entwicklerwerkzeuge → Template eingebe kommt:
“‘value_json’ is undefined”
Danke :slight_smile:

Ich habe es in die configuration.yaml geschrieben und dann HA neu gestartet.

Du mußt natürlich deine PLZ nehmen.

habe es hin bekommen.
Ich musste aber noch schauen, wie es mit loser Ware aussieht.
Habe nun productId=20&amount=6000
So bekomme ich den Tonnenpreis für 6T loser Pellets (nachdem ich deine Umrechnung raus genommen habe).
Vielen Dank nochmal!!!

@crypton Danke für den Code. Wie hast du den API Endpunkt herausgefunden? Gibt es da ggf. noch andere Abfragemöglichkeiten? Das man z.B. die Preise eines bestimmten Händlers abfragen kann.

Eigentlich hab ich nur die Entwicklerwerkzeuge vom Browser benutzt. Von welcher Seite möchtest du denn Daten lesen?

So ist der SCRAPER bei mir konfiguriert, MULTISCRAPER ist ein Add-On, wollte ich nicht benutzen. Hatte es mit dem SCRAPER von HA ruck zuck am laufen.

Text in der obersten Zeile:

#sticky-toggler > div.pricing-new.bg-white.shadow > div > div > div.middle-column.text-center > div.h3.mb-0.font-weight-bold.text-info.text-nowrap > span:nth-child(2)

Für mich habe ich es dann so gelöst…
2025-01-16 16-50-13

Ich würde gerne einzelne Händler tracken auf HeizPellets24

Z.B. die 1Heiz oder Eckhardt GmbH.

Am Ende rufe ich immer bei Eckhardt an und bekomme einen guten Preis und tollen Service!! Als z. B. Wasser im Keller stand, haben die, zu einen sehr fairen Kurs, das Pelletsilo geleert, gereinigt und wiedergbefüllt. :+1:t4: :+1:t4: :+1:t4:

Daher bestelle ich sowieso dort… :crazy_face: :rofl:

PS: Du kannst nur feste Werte in einer Webseite “scrapen”. Wenn die Betrieber also auf der Seite die Preise “rechnen”, kannst Du sie nicht auslesen. Nur zur Info, habe lange versucht, bis ich gemerkt habe, dass es nicht geht.

Klar, anrufen geht auch. Aber ich bin ja faul🤪 Der Ansatz von @crypton ist allerdings kein Scrapping. Es wird direkt ein API Endpunkt angesprochen. Dabei kann man Optionen mitgeben und sofern die API das her gibt was man möchte, bekommt man es dann. In dem Aufruf oben sind die Optionen Bester Preis, PLZ, Produkt 23 (was sie Sackware ist) usw.

(Beitrag vom Verfasser gelöscht)