Vinnaren i pepparkakshustävlingen!
2022-08-28, 20:30
  #1
Medlem
Med detta elpris vill jag automatiskt kunna styra mina elapparater hemma beroende på det aktuella elpriset. Men hur får jag hem day-ahead priset enklast?
Min ide är att köra web scraping på siten https://www.nordpoolgroup.com/en/Mar...ly/?view=table. Har dock stött på problem då innehållet i tabellerna inte visas direkt i källkoden. Någon som vet hur man kan få innehållet ut dem?
Citera
2022-08-28, 20:36
  #2
Medlem
Prova APIet från
entsoe.eu
Citera
2022-08-28, 20:46
  #3
Medlem
a-mortals avatar
Citat:
Ursprungligen postat av kanalapa
Med detta elpris vill jag automatiskt kunna styra mina elapparater hemma beroende på det aktuella elpriset. Men hur får jag hem day-ahead priset enklast?
Min ide är att köra web scraping på siten https://www.nordpoolgroup.com/en/Mar...ly/?view=table. Har dock stött på problem då innehållet i tabellerna inte visas direkt i källkoden. Någon som vet hur man kan få innehållet ut dem?
Öppna webbläsarkonsolen och använd nätverkmenyn så hittar du ibland det du söker.
https://www.nordpoolgroup.com/api/ma...urrency=,,,EUR
Citera
2022-08-28, 22:12
  #4
Medlem
Enterprises avatar
Citat:
Ursprungligen postat av HeiligeMakkaroni
Prova APIet från
entsoe.eu
Finns det elpriser i denna API?
Hittar inte det vid snabb genomläsning.
Citera
2022-08-28, 22:41
  #5
Medlem
Var det inte något liknande som är person gjorde för att boka passtid?
Är detta framtiden kanske?
Citera
2022-08-28, 23:19
  #6
Medlem
Enterprises avatar
Citat:
Ursprungligen postat av NamnA123
Var det inte något liknande som är person gjorde för att boka passtid?
Är detta framtiden kanske?
Absolut, men det vore bättre om Nordpool delade med sig av datan genom en öppen API. Just nu är det förbjudet att scrapa hos Nordpool. Det är ju samhällsekonomiskt bra att folk har koll på när det är som dyrast med strömmen och anpassar sitt beteende därefter, så jag förstår inte varför Nordpool är så “possessive”.
Citera
2022-08-29, 07:43
  #7
Medlem
Citat:
Ursprungligen postat av Enterprise
Finns det elpriser i denna API?
Hittar inte det vid snabb genomläsning.

Jag har inte använt det (än) och det finns t.ex. ett Python interface på Github. Här är en implementation som verkar hämta priser: day-ahead-prices
Citera
2022-08-29, 13:26
  #8
Medlem
Enterprises avatar
Citat:
Ursprungligen postat av HeiligeMakkaroni
Jag har inte använt det (än) och det finns t.ex. ett Python interface på Github. Här är en implementation som verkar hämta priser: day-ahead-prices
Tackar! Ser lovande ut!
Citera
2022-08-29, 14:28
  #9
Medlem
Enterprises avatar
Verkar även som att Tibber erbjuder en fri API för sina elkunder:
https://developer.tibber.com/
Sympatiskt!
Citera
2022-09-05, 03:42
  #10
Medlem
Bonnatorps avatar
Citat:
Ursprungligen postat av kanalapa
Med detta elpris vill jag automatiskt kunna styra mina elapparater hemma beroende på det aktuella elpriset. Men hur får jag hem day-ahead priset enklast?
Min ide är att köra web scraping på siten https://www.nordpoolgroup.com/en/Mar...ly/?view=table. Har dock stött på problem då innehållet i tabellerna inte visas direkt i källkoden. Någon som vet hur man kan få innehållet ut dem?
Jodå, du har datan där i klartext.
Xpathen för SE1 i första kolumnen är:
Kod:
//*[@id="datatable"]/tbody/tr[1]/td[2]
Får värdet 1962,26 i klartext i det elementet, när jag har SEK valt på 5:e september.
Ändra listnumret i sista hakparentesen till 3, 4, eller 5 så byter du elområde.
Ändra listnumret i näst sista hakparentesen så byter du rad i tidtabellen (vilket är lätt att matcha in med time-modulen).

Jag hade löst det på något i stil med detta, om man vill använda elområde ett, vill se spotpriset exakt nu och är okej med att koden inte loopar exakt var 60:e sekund, utan tar 60 sekunder mellan slut och start:
Kod:
import datetime
now = datetime.datetime.now()
while True:
    spotpris = driver.find_element(By.XPATH, '//*[@id="datatable"]/tbody/tr[' + str(now.hour) + ']/td[2]').text
    # Lägg in önskad kod här, t.ex. en ifsats som styrs med värdet på variabeln spotpris
    # I ifsatsen kan du lägga in en styrsignal till ett relä som styr dina elslukande apparater
    time.sleep(60)

Du måste lägga in några importer till för att selenium ska fungera förstås, plus ha rätt webdriver på rätt ställe, starta en instans av webdrivern och gå till hemsidan med rätt URL.
Men det antar jag du har koll på om du redan letar element för webscraping.

Lägg märke till hur nuvarande timme från now.hour hjälper till att styra vilket element som ska öppnas genom att företräda elementnumret, efter att det konverterats till en string så det passar i xpathen.
Du kan använda liknande metoder för att hitta genom många tabeller på internet om du ska matcha mot t.ex. en databas eller excelfil som du har genererat själv, eller om du bara vill räkna antalet element i den nivån, skapa en range som du itererar genom, låta iterationssiffran styra vilket specifikt element du vill hämta, lägga till elementet i en lista med .append, och sedan skjuta in hela listan du har fått i en databas.
Många webutvecklare återanvänder gärna element på just det där sättet då det är ett väldigt smidigt sätt att bygga tabeller på, och stilsätta dem med CSS sedan.
Just att bygga en databas kan vara schysst om du vill kolla historiska priset bakåt för att göra egna approximationer om vad priset kan tänkas bli framöver under de olika tiderna på dygnet.

Behöver du hitta elementdata i fortsättningen, öppna devtools i chrome (högerklicka, inspektera, eller bara F12) och tryck på den lilla muspekaren över en ruta uppe till vänster i devtools. Bredvid knappen som skiftar mellan desktopläge och mobilläge.
Sedan kan du hålla musen över de flesta element för att se vad koden är för det. Klicka på elementet för att låsa markören i koden på det.
Dubbelklicka elementkoden, eller klicka pilen vid den, för att öppna och se om det finns några underkategorier där det du letar finns.

Sedan finns förstås nätverkstabben också, den kan det ibland finnas grejer i. Tryck på network, uppdatera sidan, kolla vad som dyker upp, klicka på det du är intresserad av, och kolla vad mer som dyker upp då.
Citat:
Ursprungligen postat av HeiligeMakkaroni
Prova APIet från
entsoe.eu
Jag hittar bara annan elnätsdata än just spotpriset där.
Citat:
Ursprungligen postat av NamnA123
Var det inte något liknande som är person gjorde för att boka passtid?
Är detta framtiden kanske?
Jo, det var just den (för att inte glömma även vår bäste användare Enterprise, som bidrar med mycket i dessa krokar) som sporrade mig till att börja med webscraping.
Passfuralle hette/heter den, utvecklat av Johan Stenström. En riktigt hyvens kille, då han personligen hjälpte mig på rätt spår att börja använda det.

Ett otroligt bra verktyg i största allmänhet, det här med webscraping, och ett fantastiskt första projekt inom programmering då man kan börja smått och lätt, och utöka det ganska stort senare.
__________________
Senast redigerad av Bonnatorp 2022-09-05 kl. 04:01.
Citera
2022-09-06, 10:27
  #11
Medlem
Ang. APIet från Entso-e:
Du måste registrera dig och begära en securetoken genom att skicka e-mail.

Att hämta spotpris i Euro/MWh för SE4 för 2022-09-06:

Kod:
https://web-api.tp.entsoe.eu/api?securityToken=<securetoken>&documentType=A44&in_Domain=10Y1001A1001A47J&out_Domain=10Y1001A1001A47J&periodStart=202209052300&periodEnd=202209062300

Domainkoder för alla SE-områden:
Citat:
SE1 10Y1001A1001A44P
SE2 10Y1001A1001A45N
SE3 10Y1001A1001A46L
SE4 10Y1001A1001A47J

Svaret ser ut ung. så här:
HTML-kod:
...
<Period>
<timeInterval>
<start>2022-09-05T22:00Z</start>
<end>2022-09-06T22:00Z</end>
</timeInterval>
<resolution>PT60M</resolution>
<Point>
<position>1</position>
<price.amount>55.74</price.amount>
</Point>
<Point>
<position>2</position>
<price.amount>59.49</price.amount>
</Point>
...
Citera
2022-11-01, 01:28
  #12
Medlem
InCuloVeritass avatar
Citat:
Ursprungligen postat av a-mortal
Öppna webbläsarkonsolen och använd nätverkmenyn så hittar du ibland det du söker.
https://www.nordpoolgroup.com/api/ma...urrency=,,,EUR
Det här är rätt svar. Leta alltid efter ett API, många sidor har ett även om det inte är officiellt. HTML-koden kan ändras när som helst för att någon vill flytta på något eller designa om, men de kommer troligtvis fortsätta använda samma API. Det är dessutom en elegantare lösning, och eleganta lösningar är nästan alltid robustare.

Citat:
Ursprungligen postat av Bonnatorp
Jodå, du har datan där i klartext.
Xpathen för SE1 i första kolumnen är:
Kod:
//*[@id="datatable"]/tbody/tr[1]/td[2]
Får värdet 1962,26 i klartext i det elementet, när jag har SEK valt på 5:e september.
Ändra listnumret i sista hakparentesen till 3, 4, eller 5 så byter du elområde.
Ändra listnumret i näst sista hakparentesen så byter du rad i tidtabellen (vilket är lätt att matcha in med time-modulen).
Det beror på vad man menar. Datan är inte i källkoden från servern, den hämtas separat och läggs in av javascript. Att då använda en browser engine som selenium för att gå omvägen via javascript och DOM är onödigt, hämta datan direkt istället.

Citat:
Ursprungligen postat av Bonnatorp
Jag hade löst det på något i stil med detta, om man vill använda elområde ett, vill se spotpriset exakt nu och är okej med att koden inte loopar exakt var 60:e sekund, utan tar 60 sekunder mellan slut och start:
Kod:
import datetime
now = datetime.datetime.now()
while True:
    spotpris = driver.find_element(By.XPATH, '//*[@id="datatable"]/tbody/tr[' + str(now.hour) + ']/td[2]').text
    # Lägg in önskad kod här, t.ex. en ifsats som styrs med värdet på variabeln spotpris
    # I ifsatsen kan du lägga in en styrsignal till ett relä som styr dina elslukande apparater
    time.sleep(60)
Det här är också en klumpig lösning. Priset kommer inte uppdateras varje minut, så det finns ingen anledning att hämta det igen så ofta. Din internetanslutning kan gå ner, deras server kan vara tillfälligt nere, de kan lägga in ddos-skydd som kräver captcha, osv. Bättre att bara hämta för ett dygn i taget och spara i en lokal databas.

Om man använder deras inofficiella API så går det att lösa med en kommandorörelse på bara en rad, ska du ha det i ett Python-script blir det lite fler. Så här kan man hämta priset exklusive moms i elområde SE3 för nästkommande dygn.
Kod:
curl -s "https://www.nordpoolgroup.com/api/marketdata/page/29?currency=SEK,SEK,SEK,SEK" | jq -r ".data.Rows[].Columns[] | select(.Name == \"SE3\") | .Value"
381,16
381,16
385,53
394,26
413,04
533,04
654,56
851,53
921,52
738,63
624,32
534,02
424,07
450,28
752,17
873,48
952,52
1 220,14
1 329,10
1 087,80
897,17
382,15
342,29
263,24
263,24
1 329,10
657,80
825,67
499,29
471,21
Citera

Stöd Flashback

Flashback finansieras genom donationer från våra medlemmar och besökare. Det är med hjälp av dig vi kan fortsätta erbjuda en fri samhällsdebatt. Tack för ditt stöd!

Stöd Flashback