AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Daten aus HTML-Code auslesen (RegEx,...)

Ein Thema von Helmi · begonnen am 6. Feb 2025 · letzter Beitrag vom 11. Feb 2025
Antwort Antwort
Benutzerbild von Helmi
Helmi

Registriert seit: 29. Dez 2003
Ort: Erding, Republik Bayern
3.344 Beiträge
 
Delphi XE2 Professional
 
#1

Daten aus HTML-Code auslesen (RegEx,...)

  Alt 6. Feb 2025, 10:34
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:
</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 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>

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?
mfg
Helmi

>> Theorie ist Wissen, dass nicht funktioniert - Praxis ist, wenn alles funktioniert und keiner weiss warum! <<
  Mit Zitat antworten Zitat
AuronTLG

Registriert seit: 2. Mai 2018
Ort: Marburg
318 Beiträge
 
Delphi 12 Athens
 
#2

AW: Daten aus HTML-Code auslesen (RegEx,...)

  Alt 6. Feb 2025, 10:42
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.
  Mit Zitat antworten Zitat
Benutzerbild von Helmi
Helmi

Registriert seit: 29. Dez 2003
Ort: Erding, Republik Bayern
3.344 Beiträge
 
Delphi XE2 Professional
 
#3

AW: Daten aus HTML-Code auslesen (RegEx,...)

  Alt 6. Feb 2025, 10:49
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.
Ich möchte mich jetzt nicht darauf verlassen, dass der Aufbau gleichbleibend ist
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
mfg
Helmi

>> Theorie ist Wissen, dass nicht funktioniert - Praxis ist, wenn alles funktioniert und keiner weiss warum! <<
  Mit Zitat antworten Zitat
Delphi.Narium

Registriert seit: 27. Nov 2017
2.551 Beiträge
 
Delphi 7 Professional
 
#4

AW: Daten aus HTML-Code auslesen (RegEx,...)

  Alt 6. Feb 2025, 11:13
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:
            <tr>
                <td>
                    Diesel
                </td>
                <td><a href="/tankstelle/bft-1696" rel="nofollow">1,529</a></td>
            </tr>
wird dann
HTML-Code:
<tr>
<td>
Diesel
</td>
<td>
<a href="/tankstelle/bft-1696" rel="nofollow">
1,529
</a>
</td>
</tr>
Nun kannst Du am Anfang der Stringliste alle Zeilen bis einschließlich </thead> löschen.
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:
Diesel
1,529
Super E10
1,359
Super E5
1,564
Lässt sich mit 'ner Reihe von For-Schleifen recht einfach und schnell realisieren.

Geändert von Delphi.Narium ( 6. Feb 2025 um 11:25 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Helmi
Helmi

Registriert seit: 29. Dez 2003
Ort: Erding, Republik Bayern
3.344 Beiträge
 
Delphi XE2 Professional
 
#5

AW: Daten aus HTML-Code auslesen (RegEx,...)

  Alt 7. Feb 2025, 20:27
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.
mfg
Helmi

>> Theorie ist Wissen, dass nicht funktioniert - Praxis ist, wenn alles funktioniert und keiner weiss warum! <<
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke
Online

Registriert seit: 10. Jun 2003
Ort: Berlin
9.845 Beiträge
 
Delphi 12 Athens
 
#6

AW: Daten aus HTML-Code auslesen (RegEx,...)

  Alt 7. Feb 2025, 21:36
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.

screenshot-2025-02-07-214752.png

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;
Angehängte Dateien
Dateityp: zip XSLT simple example.zip (6,0 KB, 10x aufgerufen)
Sebastian Jänicke
AppCentral

Geändert von jaenicke ( 8. Feb 2025 um 00:48 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Helmi
Helmi

Registriert seit: 29. Dez 2003
Ort: Erding, Republik Bayern
3.344 Beiträge
 
Delphi XE2 Professional
 
#7

AW: Daten aus HTML-Code auslesen (RegEx,...)

  Alt 8. Feb 2025, 09:28
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.
schaut interessant aus - das werde ich mir mal näher betrachten.
mfg
Helmi

>> Theorie ist Wissen, dass nicht funktioniert - Praxis ist, wenn alles funktioniert und keiner weiss warum! <<
  Mit Zitat antworten Zitat
Benutzerbild von uligerhardt
uligerhardt

Registriert seit: 19. Aug 2004
Ort: Hof/Saale
1.747 Beiträge
 
Delphi 2007 Professional
 
#8

AW: Daten aus HTML-Code auslesen (RegEx,...)

  Alt 8. Feb 2025, 13:15
Obligatory: https://stackoverflow.com/questions/...732454#1732454
Uli Gerhardt
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.120 Beiträge
 
Delphi 11 Alexandria
 
#9

AW: Daten aus HTML-Code auslesen (RegEx,...)

  Alt 11. Feb 2025, 20:27
Moin Helmi,

ich hatte hier mal eine Komponente im Forum zur Verfügung gestellt, die HTML zerlegen kann.
Klasse HTMLDocument
vielleicht hilft Dir die weiter.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:43 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 by Thomas Breitkreuz