FHEM Forum

FHEM => Sonstiges => Thema gestartet von: Nicolas am 18 Juni 2020, 12:26:05

Titel: HTTPMOD & XPath / HTML "well-formed" machen
Beitrag von: Nicolas am 18 Juni 2020, 12:26:05
Hallo Zusammen,

Ich habe versucht per XPath Werte aus einer HTML Seite auszulesen. Der HTML Code ist aber nicht wohlgeformt und entsprechend schlägt der Versuch fehl.

Nun meine Frage: Wie löse ich dieses Problem am Besten? Ist es möglich den HTML Code durch ein Preprocessing aufzuräumen (z.B durch https://metacpan.org/pod/HTML::Tidy)? Wie würde ich dies integrieren?

Danke vielmals für eure Hilfe

Nicolas


===


defmod Zaehler1 HTTPMOD http://192.168.1.20:80/ 30
attr Zaehler1 handleRedirects 1
attr Zaehler1 reading01Name PowerTotal
attr Zaehler1 reading01XPath-Strict /html/body/table/tbody/tr[42]/td[2]/text()


Titel: Antw:HTTPMOD & XPath / HTML "well-formed" machen
Beitrag von: Christoph Morrison am 18 Juni 2020, 12:34:07
Hallo Nicolas,

Willkommen im Forum! Bitte setze Code in Code-Tags (das ist die # hier über diesem Eingabefeld).
Um dein Problem nachzustellen bräuchten wir mehr Infos, z.B. was http://192.168.1.20:80/ an Output liefert (ggf. anonymisiert).

Gruß
Christoph
Titel: Antw:HTTPMOD & XPath / HTML "well-formed" machen
Beitrag von: MadMax-FHEM am 18 Juni 2020, 14:24:35
Zitat von: Nicolas am 18 Juni 2020, 12:26:05
Ist es möglich den HTML Code durch ein Preprocessing aufzuräumen (z.B durch https://metacpan.org/pod/HTML::Tidy)? Wie würde ich dies integrieren?

Es gibt das Attribut "preProcessRegex" bei HTTPMOD...

https://forum.fhem.de/index.php/topic,112180.msg1065098.html#msg1065098

EDIT: falls du selbst "wurschteln" willst... Wenn du Unterstützung brauchst/willst (in dem Fall leider nicht von mir ;)  ), dann wie geschrieben: den HTML-Output posten...

Gruß, Joachim
Titel: Antw:HTTPMOD & XPath / HTML "well-formed" machen
Beitrag von: Nicolas am 21 Juni 2020, 21:28:24
Vielen Dank für die Antworten.

Ich konnte das Problem inzwischen beheben. Mein HTML file war kein gültiges XML, da nicht well-formed.

Beispiel zum Reproduzieren (in diesem Fall nicht well-formed, da <head> nicht geschlossen ist).


<html>
<head>
<body>
  <div>1000</div>
</body>
</html>


Nachdem ich die Dokumentation nochmals durchgelesen habe, war die Antwort klar:

reading[0-9]+XPath
defines an xpath to one or more readings when parsing HTML data (see examples below)
reading[0-9]+XPath-Strict
defines an xpath to one or more readings when parsing XML data (see examples below)


reading[0-9]+XPath macht genau was ich wollte. Als erstes wird die HTML Datei in well-formed gemacht (so wie es HTML::Tidy auch machen würde), danach der XPath angewandt. Wenn ich nun also reading01XPath statt reading01XPath-Strict verwende, dann klappt das parsen von einer HTML Datei perfekt.

Viele Grüsse,

Nicolas