![]() |
Daten aus HTML-Code auslesen (RegEx,...)
Hallo Zusammen,
ich bräuchte mal ein paar Ideen eurerseits. Ich habe einen HTML-Text, in dem u. a. eine solche Tabelle abgebildet ist:
Code:
Ich möchte an die Namen (Diesel, Super E10, Super E5) und an die Preise darunter: <td><a href="/tankstelle/esso-119" rel="nofollow">1,359</a></td>
</header>
<div class="container content-layout"> <div class="row"> <div class="col-md-2 left-layout-col"> <strong class="table-head">Günstigste Preise</strong> <table class="left-statistic"> <thead> <tr> <th>Sorte</th> <th>Preis</th> </tr> </thead> <tr> <td> Diesel </td> <td><a href="/tankstelle/bft-1696" rel="nofollow">1,529</a></td> </tr> <tr> <td> Super E10 </td> <td><a href="/tankstelle/esso-119" rel="nofollow">1,359</a></td> </tr> <tr> <td> Super E5 </td> <td><a href="/tankstelle/landwirtschaftliche-bezugsgenossenschaft-eg-2642" rel="nofollow">1,564</a></td> </tr> </table> Ich tendiere jetzt zu RegEx, schon allein, weil ich es schon in dem Projekt verwende. Aber hat jemand eine andere Idee, wie ich an die Werte kommen könnte? Vielleicht gibt es ja auch noch was einfacheres? |
AW: Daten aus HTML-Code auslesen (RegEx,...)
Wenn der Aufbau der HTML bekannt und verlässlich gleichbleibend ist, könnte man sie vielleicht als XML auslesen (IXMLDocument etc verwenden und den Text reinlesen). Ich bin mir nicht sicher, ob ich das schonmal gemacht habe, aber zumindest in der Theorie sollte das funktionieren.
Hätte den Vorteil, dass man es ordentlich automatisieren kann, anstatt mit RegEx herumfuchteln zu müssen. |
AW: Daten aus HTML-Code auslesen (RegEx,...)
Zitat:
Insgesamt wären es drei Tabellen. Dein Vorschlag würde mir gut gefallen - wäre einfacher als RegEx und sollte man doch noch etwas parsen müssen, dann wäre der entsprechende Text kürzer |
AW: Daten aus HTML-Code auslesen (RegEx,...)
Zuerst die Datei in eine Stringliste einlesen. Dann alle Zeilen von führenden und folgenden Leerzeichen befreien.
Dann die Datei in eine Stream schieben und diesen zeichenweise in einen zweiten Stream schreiben. Dabei vor allen < einen Zeilenumbruch schreiben und hinter jedem > ebenfalls einen Zeilenumbruch schreiben. Alle vorhandenen Zeilenumbrüche werden durch ein Leerzeichen ersetzt. Das Ergebnis wieder in die Stringliste kopieren. Dort hast Du dann alle Tags und Texte jeweils in einer eigenen Zeile. Aus
HTML-Code:
wird dann
<tr>
<td> Diesel </td> <td><a href="/tankstelle/bft-1696" rel="nofollow">1,529</a></td> </tr>
HTML-Code:
Nun kannst Du am Anfang der Stringliste alle Zeilen bis einschließlich </thead> löschen.
<tr>
<td> Diesel </td> <td> <a href="/tankstelle/bft-1696" rel="nofollow"> 1,529 </a> </td> </tr> Am Ende der Stringliste löschst Du alle Zeilen bis zum letzten </tr>. Damit hast Du nun nur noch den Tabelleninhalt in der Stringliste. Anschließend löschst Du alle Zeilen, die nicht mit einem < beginnen. Die verbleibenden Zeilen befreist Du von führenden und folgenden Leerzeichen. Leere Zeilen werden anschließend entfernt. Übrig bleiben dann
Code:
Lässt sich mit 'ner Reihe von For-Schleifen recht einfach und schnell realisieren.
Diesel
1,529 Super E10 1,359 Super E5 1,564 |
AW: Daten aus HTML-Code auslesen (RegEx,...)
Hallo,
ich habe mich nun doch für RegEx entschieden, auch wenn es mit viel Fluchen verbunden war. Zusätzlich konnte ich noch einen bereits vorhandenen RegEx anpassen. Danke an eure Ideen. |
AW: Daten aus HTML-Code auslesen (RegEx,...)
Liste der Anhänge anzeigen (Anzahl: 2)
Eine XSLT-Transformation ist auch eine Möglichkeit, die sehr übersichtlich und leicht anzupassen ist. Ein Beispielprojekt liegt anbei. Das Stylesheet kann hier leider nicht korrekt dargestellt werden, daher habe ich es wieder entfernt. Siehe Anhang.
Anhang 57388 Man kann auf die Weise auch eine Liste der Knoten holen usw., d.h. das ganze ist sehr flexibel. Oder man holt sich nur die Knoten über ein Select:
Delphi-Quellcode:
var
NodeList: IXMLDOMNodeList; Node: IXMLDOMNode; ... NodeList := HtmlDoc.selectNodes('//table[@class="left-statistic"]/tr'); for i := 0 to NodeList.length - 1 do begin Node := NodeList.item[i]; memResult.Lines.Add(IntToStr(i + 1) + ': ' + Node.xml); end; |
AW: Daten aus HTML-Code auslesen (RegEx,...)
Zitat:
|
AW: Daten aus HTML-Code auslesen (RegEx,...)
Obligatory:
![]() |
AW: Daten aus HTML-Code auslesen (RegEx,...)
Moin Helmi,
ich hatte hier mal eine Komponente im Forum zur Verfügung gestellt, die HTML zerlegen kann. ![]() vielleicht hilft Dir die weiter. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:04 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz