suche nach Regular Expression für HTTPMOD

Begonnen von NE555, 18 Juni 2022, 21:19:13

Vorheriges Thema - Nächstes Thema

NE555

Einen guten Tag allerseits, bitte freundlichst um Unterstützung.

Ich möchte mit HTTPMOD aus der Webseite:
https://www.agrarwetter.net/Agrarwetter-Aktuell/Hamburg.Ist.html

Zeile 1594 - 1616
<td valign='top' align='left' bgcolor='#E0F0C1' class='MITTEFORMULARSPALTE_WETTER' width='142'><span class='SCHRIFT_FORMULARFELDBESCHRIFTUNG_MITTE_WETTER'>Temperatur</span></td>
<td class='FARBE_FORMULAR_MITTE'><img src='/Wetter_image/Wetter-Agrarwetter.gif' class=imageleer alt='Wetter-Agrarwetter' title='Wetter-Agrarwetter' width='2' height='1' vspace='0' hspace='0' class='FARBE_FORMULAR_MITTE'></td> <td valign='top' align='left' bgcolor='#ffffff' class='MITTEFORMULARSPALTE_WETTER' width='20%' ><span class='SCHRIFT_FORMULAR_WERTE_MITTE'>21,2 &deg;C</span></td>
</tr>
<tr><td><img src='/Wetter_image/Wetter-Agrarwetter.gif' class=imageleer alt='Wetter-Agrarwetter' title='Wetter-Agrarwetter' width='142' height='1' hspace='0' vspace='0' border='0' ></td><td colspan='2' class='FARBE_FORMULAR_MITTE'><img src='/Wetter_image/Wetter-Agrarwetter.gif' class=imageleer alt='Wetter-Agrarwetter' title='Wetter-Agrarwetter' height='2' width='1' vspace='0' hspace='0'></td></tr>
<tr>
<td valign='top' align='left' bgcolor='#E0F0C1' class='MITTEFORMULARSPALTE_WETTER' width='142'><span class='SCHRIFT_FORMULARFELDBESCHRIFTUNG_MITTE_WETTER'>Luftdruck</span></td>
<td class='FARBE_FORMULAR_MITTE'><img src='/Wetter_image/Wetter-Agrarwetter.gif' class=imageleer alt='Wetter-Agrarwetter' title='Wetter-Agrarwetter' width='2' height='1' vspace='0' hspace='0' class='FARBE_FORMULAR_MITTE'></td> <td valign='top' align='left' bgcolor='#ffffff' class='MITTEFORMULARSPALTE_WETTER' width='20%' ><span class='SCHRIFT_FORMULAR_WERTE_MITTE'>1015,9 hPa</span></td>
</tr>
<tr><td><img src='/Wetter_image/Wetter-Agrarwetter.gif' class=imageleer alt='Wetter-Agrarwetter' title='Wetter-Agrarwetter' width='142' height='1' hspace='0' vspace='0' border='0' ></td><td colspan='2' class='FARBE_FORMULAR_MITTE'><img src='/Wetter_image/Wetter-Agrarwetter.gif' class=imageleer alt='Wetter-Agrarwetter' title='Wetter-Agrarwetter' height='2' width='1' vspace='0' hspace='0'></td></tr>
<tr>
<td valign='top' align='left' bgcolor='#E0F0C1' class='MITTEFORMULARSPALTE_WETTER' width='142'><span class='SCHRIFT_FORMULARFELDBESCHRIFTUNG_MITTE_WETTER'>Wetterzustand</span></td>
<td class='FARBE_FORMULAR_MITTE'><img src='/Wetter_image/Wetter-Agrarwetter.gif' class=imageleer alt='Wetter-Agrarwetter' title='Wetter-Agrarwetter' width='2' height='1' vspace='0' hspace='0' class='FARBE_FORMULAR_MITTE'></td> <td valign='top' align='left' bgcolor='#ffffff' class='MITTEFORMULARSPALTE_WETTER' width='20%' ><span class='SCHRIFT_FORMULAR_WERTE_MITTE'><nobr><img src='https://www.proplanta.de/wetterdaten/images/symbole/n4.gif' class=imageleer alt='Wetterzustand: stark bewölkt' title='Wetterzustand: stark bewölkt' ></nobr></span></td>
</tr>
<tr><td><img src='/Wetter_image/Wetter-Agrarwetter.gif' class=imageleer alt='Wetter-Agrarwetter' title='Wetter-Agrarwetter' width='142' height='1' hspace='0' vspace='0' border='0' ></td><td colspan='2' class='FARBE_FORMULAR_MITTE'><img src='/Wetter_image/Wetter-Agrarwetter.gif' class=imageleer alt='Wetter-Agrarwetter' title='Wetter-Agrarwetter' height='2' width='1' vspace='0' hspace='0'></td></tr>
<tr>
<td valign='top' align='left' bgcolor='#E0F0C1' class='MITTEFORMULARSPALTE_WETTER' width='142'><span class='SCHRIFT_FORMULARFELDBESCHRIFTUNG_MITTE_WETTER'>relative Feuchte</span></td>
<td class='FARBE_FORMULAR_MITTE'><img src='/Wetter_image/Wetter-Agrarwetter.gif' class=imageleer alt='Wetter-Agrarwetter' title='Wetter-Agrarwetter' width='2' height='1' vspace='0' hspace='0' class='FARBE_FORMULAR_MITTE'></td> <td valign='top' align='left' bgcolor='#ffffff' class='MITTEFORMULARSPALTE_WETTER' width='20%' ><span class='SCHRIFT_FORMULAR_WERTE_MITTE'>60 %</span></td>
</tr>
<tr><td><img src='/Wetter_image/Wetter-Agrarwetter.gif' class=imageleer alt='Wetter-Agrarwetter' title='Wetter-Agrarwetter' width='142' height='1' hspace='0' vspace='0' border='0' ></td><td colspan='2' class='FARBE_FORMULAR_MITTE'><img src='/Wetter_image/Wetter-Agrarwetter.gif' class=imageleer alt='Wetter-Agrarwetter' title='Wetter-Agrarwetter' height='2' width='1' vspace='0' hspace='0'></td></tr>
<tr>
<td valign='top' align='left' bgcolor='#E0F0C1' class='MITTEFORMULARSPALTE_WETTER' width='142'><span class='SCHRIFT_FORMULARFELDBESCHRIFTUNG_MITTE_WETTER'>Taupunkt</span></td>
<td class='FARBE_FORMULAR_MITTE'><img src='/Wetter_image/Wetter-Agrarwetter.gif' class=imageleer alt='Wetter-Agrarwetter' title='Wetter-Agrarwetter' width='2' height='1' vspace='0' hspace='0' class='FARBE_FORMULAR_MITTE'></td> <td valign='top' align='left' bgcolor='#ffffff' class='MITTEFORMULARSPALTE_WETTER' width='20%' ><span class='SCHRIFT_FORMULAR_WERTE_MITTE'>12,8 &deg;C</span></td>
</tr>


mit reading01Regex das Wort "Temperatur" und die, nach ca. 380 Zeichen folgende "21,2 &deg;C" auslesen, sowie im weiteren reading02Regex das Wort "Taupunkt" mit dem, nach ca. 380 Zeichen später folgenden "12,8 &deg;C" auslesen.

Dazu teste ich die Regular Expression auf der Seite:
https://regex101.com/

Mit
([Temperatur])(.{200,400}>)([-]?[0-5]?[0-9][,][0-9])(\D&deg;C)
wird nicht das Wort "Temperatur" und die "21,2 &deg;C" gleichzeitig erfasst,
([-]?[0-5]?[0-9][,][0-9])(\D&deg;C)
klappt für die erste Temperaturangabe. Um sicher zu gehen, möchte ich "Temperatur" und "21,2 &deg;C" auslesen.
Selbst, wenn ich Testweise den kompletten Abschnitt der Webseite in den Regular Expression nehme, klappt es nicht.
Gibt es eine Beschränkung für (.{200,400}>)?
Oder eine Möglichkeit?
Hat jemand eine Idee?
RPI3 SONOFF sV,Touch,S26 mit Tasmota

DetlefR

Hallo,

sicher ist das Auslesen nicht, da es keinen wirklich eindeutigen Bezug gibt.
Versuch es mal mit Abzählen. Im Beispiel die ">"(Temperatur)(?:[^>]+>){7}(\d+,\d+)
Bei Taupunkt sind es auch sieben ">"

betateilchen

Zitat von: DetlefR am 19 Juni 2022, 00:11:58
sicher ist das Auslesen nicht, da es keinen wirklich eindeutigen Bezug gibt.

Wieso nicht?

Versuchen wir doch mal, das Vorhaben auf das Wesentliche zu abstrahieren.


  • Die Daten stehen in einer HTML-Tabelle
  • Gesucht sind die beiden Tabellenzeilen, die "Temperatur" und "Taupunkt" in einem Tabellenfeld enthalten
  • Eine Zeile in einer HTML Tabelle beginnt immer mit <tr> und endet mit </tr>

Mit diesen Vorgaben sollte sich die Aufgabe problemlos lösen lassen.
Die Reihenfolge der Zeilen spielt dann auch keine Rolle mehr.

(ich würde dafür übrigens nicht HTTPMOD, sondern eine eigene Funktion zur HTML-Tabellenextraktion verwenden)
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!