NEWS
[GELÖST] Hilfe beim Parsen mit RegEx
-
Hallo zusammen,
kann mir jemand mit einer Regular Expression helfen?
Ich möchte von der Seite des Köln-Bonner Flughafens die Betriebsrichtung der Abflüge herauslesen, also die letze Bahn für Abflüge.
https://www.koeln-bonn-airport.de/unternehmen/umwelt-und-laermschutz/betriebsrichtung-live.html
Die kann sein 14L, 32R, 14R, 32L, 06 oder 24. Daraus kann ich ableiten ob die über uns hinweg starten oder eben nicht.
Der Schnipsel im Quellcode sieht so aus:
class=brtr1><td>letzte Bahn für Abflüge:</td><td>32R</td></tr>
Ich habe versucht mich mit https://regex101.com der Sache zu nähern, aber ich bekomme in meinen Ausdrücken immer den '/' aus </td> moniert.
PS: Komischerweise hat das hier schon mal für ein paar Stunden im Parser-Adpater funktioniert, jetzt aber nicht mehr:
letzte Bahn für Abflüge:</td><td>(\w+)</td></tr>
VG
Frank
-
@frank2604 sagte in Hilfe beim Parsen mit RegEx:
</td><td>(\w+)</td></tr>
<\/td><td>(\w+)<\/td><\/tr>
-
-
@frank2604 gerne
-
So, nachdem ich nun alles erfolgreich umgesetzt habe hier mal das Ergebnis. Vielleicht hilft es als kleines Übungsbeispiel anderen Anfängern wie mir beim Einstieg in den Parser-Adapter - man muss ja auch mal was ans Forum zurückgeben
Ziel war es, die Daten zur Betriebsrichtung des Flughafens KölnBonn zwecks Weiterverarbeitung in VIS auszulesen und zu historisieren. Je nach Startbahn, die meist von der Windrichtung vorgegeben ist, bekommen wir hier etwas Fluglärm von den Abflügen Richtung Nordwest ab.
Der Flughafen stellt die Betriebsrichtung auf seiner Webseite dar, die sich leider nicht als iFrame in VIS einbinden lässt.
https://www.koeln-bonn-airport.de/unternehmen/umwelt-und-laermschutz/betriebsrichtung-live.html
im Browser lässt man sich den Quellcode der Webseite anzeigen und such nach der Stelle mit den gewünschten Informationen.
Der Code mit der Tabelle unter der Kartendarstellung sieht so aus:
<div id="c2102" class="frame frame-default frame-type-list frame-layout-0"><div class="tx-cgn-modules"><p style='margin:5px 0px 10px 0px;'>Auswertungszeitraum: 17.11.2020 07:49 - 08:49</p><h2>Ankunft</h2><table class="betriebsrichtungtab table table-condensed"><tr valign=top class=brtr0><td class='col-xs-6'>Ankünfte gesamt im Auswertungszeitraum:</td><td>4</td></tr><tr class=brtr1><td>letzte Bahn für Ankünfte:</td><td>24</td></tr><!--<tr><td>Anzahl:</td><td>4</td></tr>--><tr class=brtr0><td>letzter Flugzeugtyp:</td><td>unbekannt: DF20X (19,1t)</td></tr></table><h2>Abflug</h2><table class="betriebsrichtungtab table table-condensed"><tr valign=top class=brtr0><td class='col-xs-6'>Abflüge gesamt im Auswertungszeitraum:</td><td>2</td></tr><tr class=brtr1><td>letzte Bahn für Abflüge:</td><td>14L</td></tr><!--<tr><td>Anzahl:</td><td>2</td></tr>--><tr class=brtr0><td>letzter Flugzeugtyp:</td><td>Bombardier BD-700 Global Express (45,1t)</td></tr></table><h2>Wetterdaten</h2><table class="betriebsrichtungtab table table-condensed"><tr class=brtr0><td class='col-xs-6'>Luftdruck (hPa):</td><td>1024</td></tr><tr class=brtr1><td>Lufttemperatur (°C):</td><td>11,0</td></tr><tr class=brtr0><td>Windgeschwindigkeit (m/s):</td><td> 4,1</td></tr><tr class=brtr1><td>Windrichtung (°):</td><td>200</td></tr><tr class=brtr0><td>Taupunkt (°C):</td><td>8,0</td></tr><tr class=brtr1><td>Relative Luftfeuchtigkeit (%):</td><td>81</td></tr></table><script language="javascript"><!--//
Um nun eine Regular Expression zu erstellen und zu testen bietet sich ein Online-Tool an: https://regex101.com
In die untere große Box den Quellcode reinschmeißen, oben die RegEx
Denkt an die eliminierenden \ vor eventuellen / im Quellcode. Siehe die Lösung des Problems oben von @liv-in-sky
Hier die Ausdrücke, mit denen ich meine 7 Datenpunkte auslese:
Abflüge gesamt im Auswertungszeitraum:</td><td>(\d+)</td>
letzte Bahn für Abflüge:</td><td>(\w+)</td>
letzter Flugzeugtyp:</td><td>(.?)<
Ankünfte gesamt im Auswertungszeitraum:</td><td>(\d+)</td>
letzte Bahn für Ankünfte:</td><td>(\w+)</td>
letzter Flugzeugtyp:</td><td>(.?)<
Auswertungszeitraum: (.*?)<Im Adapter sieht das ganze dann so aus:
Da der Teil 'letzter Flugzeugtyp' zweifach gefunden wird, muss man in der Spalte Num einmal 0 für den ersten Treffer und einmal 1 für den zweiten Treffer angeben.
Ergebnis in der Objektansicht:
Grüße
Frank
-
Hallo @liv-in-sky
Kannst Du mir vielleicht nochmal helfen?
Was muss ich tun, wenn mein String, den ich zum finden der Stelle angebe, schon Klammern hat:
Windgeschwindigkeit (m/s):<\/td><td> (\d+)<
Danke
Frank
-
wie beim letzten mal - einen backslash davor - so wird dem regex gesagt, dass die klammer eine zeichen ist und kein regex-befehl
\(..\)
-
-
Hallo Zusammen, ich habe ein ähnliches Problem, aber noch nicht gelöst. Auf der folgenden WebSeite will ich einen speziellen Betrag auslesen:
<!DOCtype HTML PUBLIC "-//W3C//Dtd HTML 4.0 Transitional//EN"> <html> <head> <meta HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=ISO-8859-1"> <meta name="Generator" CONTENT="ChrisB"> <title>PV Webserver</title> </head> <body nof="(MB=(DefaultMasterborder, 65, 60, 150, 10), L=(HomeLayout, 700, 600))" bgcolor="#EAF7F7" text="#000000" link="#0033CC" vlink="#990099" alink="#FF0000" topmargin=0 leftmargin=0 marginwidth=0 marginheight=0> <form method="post" action=""> <table cellspacing="0" cellpadding="0" width="770" nof="ly"> <tr><td height="5"></td></tr> <tr><td width="190" height="55"></td> <td width="400"> <font face="Arial,Helvetica,Geneva,Sans-serif,sans-serif" size="+3"> PIKO 8.3 <br><font size="+1"> Sunny_Esch (1) </font> </font> </td> <td><img alt="Logo" height="42" width="130" src="KSE.gif"></td> </tr> </table> <font face="Arial,Helvetica,Geneva,Sans-serif,sans-serif"> <table Border="0" width="100%"><tr> <td width="150"></td> <td> <hr> </td> </tr></table> <table cellspacing="0" cellpadding="0" width="770"> <tr><td></td></tr> <tr> <td width="190"></td> <td colspan="2"> <b>AC-Leistung</b></td> <td> </td> <td> <b>Energie</b></td></tr> <tr><td height="10"></td></tr> <tr> <td width="190"></td> <td width="100"> aktuell</td> <td width="70" align="right" bgcolor="#FFFFFF"> 1465</td> <td width="140">  W</td> <td width="100"> Gesamtertrag</td> <td width="70" align="right" bgcolor="#FFFFFF"> 82833</td> <td width="50">  kWh</td> <td> </td></tr> <tr height="5"><td></td></tr> <tr> <td width="190"></td> <td width="100"> Status</td> <td colspan="4"> Einspeisen MPP</td> <td> </td></tr> <tr height="8"><td></td></tr> <tr><td colspan="7"> <table align="top" width="100%"><tr> <td width="182"></td> <td><hr size="1"></font></td> </tr><tr><td height="5"></td></tr></table> </td></tr> <tr> <td width="190"></td> <td colspan="2"> <b>PV-Generator</b></td> <td width="140"> </td> <td colspan="2"> <b>Ausgangsleistung</b></td> <td width="30"> </td> <td> </td></tr> <tr><td height="10"></td></tr> <tr> <td width="190"></td> <td width="100"> <u>String 1</u></td> <td width="70"> </td> <td width="140"> </td> <td width="95"> <u>L1</u></td> <td width="70"> </td> <td width="30"> </td> <td> </td></tr> <tr> <td width="190"></td> <td width="100"> Spannung</td> <td width="70" align="right" bgcolor="#FFFFFF"> 421</td> <td width="140">  V</td> <td width="100"> Spannung</td> <td width="70" align="right" bgcolor="#FFFFFF"> 230</td> <td width="30">  V</td> <td> </td></tr> <tr height="2"><td></td></tr> <tr valign="top" align="left"> <td width="190"> </td> <td width="100"> Strom</td> <td width="70" align="right" bgcolor="#FFFFFF"> 2.08</td> <td width="140">  A</td> <td width="100"> Leistung</td> <td width="70" align="right" bgcolor="#FFFFFF"> 478</td> <td width="30">  W</td> <td> </td></tr> <tr height="22"><td></td></tr> <tr> <td width="190"></td> <td width="100"> <u>String 2</u></td> <td width="70"> </td> <td width="140"> </td> <td width="100"> <u>L2</u></td> <td width="70"> </td> <td width="30"> </td> <td> </td></tr> <tr> <td width="190"></td> <td width="100"> Spannung</td> <td width="70" align="right" bgcolor="#FFFFFF"> 358</td> <td width="140">  V</td> <td width="100"> Spannung</td> <td width="70" align="right" bgcolor="#FFFFFF"> 231</td> <td width="30">  V</td> <td> </td></tr> <tr height="2"><td></td></tr> <tr valign="top" align="left"> <td width="190"> </td> <td width="100"> Strom</td> <td width="70" align="right" bgcolor="#FFFFFF"> 2.02</td> <td width="140">  A</td> <td width="100"> Leistung</td> <td width="70" align="right" bgcolor="#FFFFFF"> 486</td> <td width="30">  W</td> <td> </td></tr> <tr height="22"><td></td></tr> <tr> <td width="190"></td> <td width="100"> <u> </u></td> <td width="70"> </td> <td width="140"> </td> <td width="100"> <u>L3</u></td> <td width="70"> </td> <td width="30"> </td> <td> </td></tr> <tr> <td width="190"></td> <td width="100"> </td> <td width="70" align="right" bgcolor="#EAF7F7"> </td> <td width="140">  </td> <td width="95"> Spannung</td> <td width="70" align="right" bgcolor="#FFFFFF"> 232</td> <td width="30">  V</td> <td> </td></tr> <tr height="2"><td></td></tr> <tr valign="top" align="left"> <td width="190"> </td> <td width="95"> </td> <td width="70" align="right" bgcolor="#EAF7F7"> </td> <td width="140">  </td> <td width="95"> Leistung</td> <td width="70" align="right" bgcolor="#FFFFFF"> 501</td> <td width="30">  W</td> <td> </td></tr> <tr><td height="15"></td></tr> <tr><td colspan="7"> <table align="top" width="100%"> <tr><td width="182"></td> <td><hr size="1"></font></td> </tr><tr><td height="5"></td></tr></table> </td></tr></table> <table cellspacing="0" cellpadding="0" width="770"> <tr><td width="190"></td> <td><font face="Arial,Helvetica,Geneva,Sans-serif"> <b>RS485 Kommunikation</b></td></tr> <tr><td height="8"></td></tr> <tr><td width="190"></td> <td><font face="Arial,Helvetica,Geneva,Sans-serif"> Wechselrichter  <input type="Text" name="edWrNr" value="1" size="3" maxlength="3"> <input type="submit" value="Anzeigen/Aktualisieren"> </td></tr><tr><td height="10"></td></tr> </table> </td></tr></table></font> <hr> <font face="Arial,Helvetica,Geneva,Sans-serif,sans-serif"> <table cellspacing="0" cellpadding="0" width="770"> <tr><td height="5"></td></tr> <tr><td width="190"></td> <td width="330"> <a href="LogDaten.dat">Historie</a>       <a href="Info.fhtml">Infoseite</a></td> <td align="right"> <a href="Solar2.fhtml">Einstellungen</a></td> <td width="50"></td> </tr></table></font> </form> </body> </html>
im regex101 bekomme ich mit folgendem RegEx-Code
Gesamtertrag<\/td>\n<td.*>\n\s*(\d*)<\/td>
den richtigen Betrag zurück. Im Parser-Adapter aber nicht. Hat jemand eine Idee?
Was im Parser-Adapter unter der Spalte RegEx den Ausdruck "td" jeweils rot unterstrichen, so als wäre hier die Syntax nicht richtig.
-
@mueller-esch sagte in [GELÖST] Hilfe beim Parsen mit RegEx:
Hat jemand eine Idee?
Ja!
\n
klappt im parser Adapter nichtversuch mal:
tertrag<\/td>[^>]+>\s+(\d+)
-
@homoran sagte in [GELÖST] Hilfe beim Parsen mit RegEx:
</td>[^>]+>\s+(\d+)
....das ist ja Wahnsinn. Ich war ja noch nicht mal ganz fertig mit meinem "Sermon". das Ding klappt.
Super. Danke vielmals -
@mueller-esch schön, dass es klappt.
Ist das mal wieder ein alter Kostal?
-
@homoran Genau. Der ist von 5/2008 und liefert immer noch ohne Mucken die kWh aus dem All.