Autor Thema: HTTPMOD & XPath / HTML "well-formed" machen  (Gelesen 127 mal)

Offline Nicolas

  • New Member
  • *
  • Beiträge: 3
HTTPMOD & XPath / HTML "well-formed" machen
« 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()

« Letzte Änderung: 21 Juni 2020, 21:28:57 von Nicolas »

Offline Christoph Morrison

  • Developer
  • Hero Member
  • ****
  • Beiträge: 1191
  • Ein paar Wochen afk
    • Private Website
Antw:HTTPMOD & XPath / HTML "well-formed" machen
« Antwort #1 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
Maintainer von:
holidays · 59_Twilight · contrib/sacha_gloor · Buienradar

Offline MadMax-FHEM

  • Hero Member
  • *****
  • Beiträge: 7951
  • NIVEAu ist keine Creme...
Antw:HTTPMOD & XPath / HTML "well-formed" machen
« Antwort #2 am: 18 Juni 2020, 14:24:35 »
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
FHEM PI3B+ Buster: HM-CFG-USB, 40x HM, ZWave-USB, 6x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, KODI, alexa-fhem, ...
FHEM PI2 Stretch: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, KODI, ha-bridge, ...
FHEM PI3 Buster (Test)
FHEM PI3 Stretch (Test)

Offline Nicolas

  • New Member
  • *
  • Beiträge: 3
Antw:HTTPMOD & XPath / HTML "well-formed" machen
« Antwort #3 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

 

decade-submarginal