Goldpreis per Scrape - benötige Hilfe

Ich versuche nun schon seit Tagen den Kurswert eines 100 Gramm Goldbarrens mit Scrape auszulesen. Leider scheitern alle meine Versuche. Ich habe es bisher nur geschafft, auf der Seite https://Goldpreis.de die Werte aller


aufgeführten Barren anzuzeigen. Sie auf dem Dashboard nicht gerade gut aus.
Folgenden Code habe ich in Scrape eingetragen.
Code
body > div.container > div:nth-child(2) > div.col-md-4 > section.box_sidebarpreise > table:nth-child(4)

Ich würde mich freuen, wenn einer mir ein Beispiel geben könnte, wie ich die einzelnen Werte splitten kann, falls dies überhaupt möglich ist.

1 „Gefällt mir“

Hi, du könntest bestimmt mit einem Template die gewünschte Position aus dem Sensor ziehen. Dazu muss man dann z.B. den Text beschneiden, also bei EUR100 g anfangen und bis zum nächsten Leerzeichen ausschneiden.

Teile bitte deinen Code vom Sensor, dann kann besser geholfen werden. :slight_smile:

So könnte das Template aussehen, muss dann unten zum angelegtem Sensor hinzugefügt werden. Durch split('EUR100 g') und split(' ') wird der Text bis zum nächsten Leerzeichen nach 100g ausgeschnitten.

value_template: >-
  {% set text = value.split('EUR100 g')[-1].split(' ')[0] %}
  {{ text }}

Die Lösung von @Dr.Big funktioniert auch:

tr:has(td:contains('100 g')) td.text-right span
1 „Gefällt mir“

Versuche mal, ganz einfach:

tr:has(td:contains('100 g')) td.text-right span

Grüße..

2 „Gefällt mir“

Eigentlich auch eine gute Idee, dass aus der Tabelle zu extrahieren, denke aber mit td.text-right span wird die ganze Zelle und damit wieder der gesamte Text danach ausgegeben. Aber ein Versuch wäre es Wert.

1 „Gefällt mir“

Nee, es wird nicht der ganze folgende Text angezeigt sondern nur der Rest der Tabellenzeile und das ist in diesem Fall der gewünschte „Wert“!

Ich nutze das hier schon eine ganze Weile, nur nicht für so ein „paar Gramm“ sondern gleich mal für das „Kilo“ → Klotzen statt kleckern! bzw. Wunschdenken! :innocent:

2 „Gefällt mir“

@jayjojayson @Dr.Big ganz herzlichen Dank für eure Lösung, beide Hinweise funktionieren.

2 „Gefällt mir“

Servus zusammen,
habe mich extra wegen diesem Thema hier angemeldet:)
Es geht mir nämlich auch um Goldpreise in HA.
Alles was man da aktuell über scrape liest, hat mir leider nicht
weiter geholfen und auch mit den Angaben hier im Post, kann ich es aktuell nicht rekonstruieren.
Läuft das denn so noch bei @baerny
vielleicht hat sich da in den letzten Monaten aber auch wieder was geändert.

Wenn es läuft, wie geanu sehen Deine scrape Einträge denn aus?
Danke für kurze Hilfestellung

Hardy

Läuft!!! wie oben beschrieben!

bei „scrape“ auf erster Seite bei URL https://www.goldpreis.de

auf 2. Seite Name anpassen zb. „Goldpreis 250gr in €“
und bei auswählen dann tr:has(td:contains('250 g')) td.text-right span

fertig!

Läuft bei mir recht gut, ich hab lediglich bei einigen Werten ( z.B. Gold 50 gr barren, American Eagle ) das Problem, das da irgendwann kommt, nicht verfügbar. Muss dann halt eine andere Quelle suchen. Insgesamt bin ich zufrieden.

na das klingt doch super.
ich habe das alles genau so eingegeben, wie @Dr.Big es geschrieben hat,
läuft trotzdem nicht.
irgendwo ist noch ein Fehler an dieser Stelle

tr:has(td:contains('250 g')) td.text-right span

ich hätte gerne einen Preis für 100g Barren.
Wenn ich irgend ein Ergebnis bekomme egal ob 50g oder 250g kann ich das ja umrechnen, es kommt aber gar nichts an …

EDIT:
hat jetzt funktioniert.
Man darf keine Einheit angeben, ich hatte da € eingetragen.
Besten Dank für Eure Hilfe

jetzt wo die Kiste läuft denkt man ja gleich über Optimierungen nach.
Also diese Seite goldpreis.de ist das ein Händler?

falls nicht wäre es bestimmt sinnvoller, die Preise eines Händlers zu verwenden, denn das ist dann ja auch das, was man am Ende bezahlen muss (also inkl. mark-up und Versand)

zB von hier …

EDIT:
um das Datenvolumen nicht unnötig aufzublähen würde ich die Abfrage mal auf alle 5 Min. begrenzen, aber wo gibt man das ein?

So, es gibt noch ein Problem:
Der Sensor hat keinen numerischen Wert und mit dem Text kann man nicht so viel anfangen.

Wie kann ich denn jetzt aus

12.345,67 €

eine Zahl machen, mit der ich weiterrechnen kann?

ein Template wäre ein Weg

template:
  - sensor:
      - name: "Preis numerisch"
        unit_of_measurement: "€"
        state: >
          {% set value = states('sensor.preis_text') %}
          {{ value
             | replace('€','')
             | replace('.','')
             | replace(',','.')
             | trim
             | float(0)
          }}

Kannst du so unter „Entwicklerwerkzeuge/Template“ testen:

template:
  - sensor:
      - name: "Preis numerisch"
        unit_of_measurement: "€"
        state: >
          {% set value = "12.345,67 €" %}
          {{ value
             | replace('€','')
             | replace('.','')
             | replace(',','.')
             | trim
             | float(0)
          }}

besten Dank, das hat so jetzt funktioniert:

es muß eine Zahl sein, ohne Währung ….

{% set temp = states('sensor.mein_sensor') %}
{{ (temp.split("€")[0]) | replace('.','') | replace(',','.') | float(0) }}
1 „Gefällt mir“