AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi Wie am effektivsten aus diesen HTML Code Text parsen ?
Thema durchsuchen
Ansicht
Themen-Optionen

Wie am effektivsten aus diesen HTML Code Text parsen ?

Ein Thema von BBoy · begonnen am 24. Apr 2010 · letzter Beitrag vom 24. Apr 2010
Antwort Antwort
BBoy

Registriert seit: 17. Jan 2007
418 Beiträge
 
Delphi 10 Seattle Professional
 
#1

Wie am effektivsten aus diesen HTML Code Text parsen ?

  Alt 24. Apr 2010, 10:49
Ich möchte aus einer HTML-Code Tabelle (eine Topliste) die Daten extrahieren in ein Format das ich dann auch gut weiterverarbeiten kann.
Der HTML-Code sieht folgendermaßen aus:
Zitat:
1: <DIV class=topline onmouseover="this.style.backgroundColor='#084600'" onmouseout="this.style.backgroundColor='transparen t'">
2: <DIV class=c1>15</DIV>
3: <DIV class=c2>
4: <DIV class="c2 kp10"></DIV>
5: <DIV class=c2_2>User</DIV>
</DIV>
6: <DIV class=c3>Platzierung</DIV>
7: <DIV class=c4>2200</DIV>
8: <DIV class=c5>77000</DIV>
9: <DIV class=c6>anzeigen</DIV>
</DIV>
10: <DIV class=topline onmouseover="this.style.backgroundColor='#084600'" onmouseout="this.style.backgroundColor='transparen t'">

<DIV class=topline onmouseover="this.style.backgroundColor='#084600'" onmouseout="this.style.backgroundColor='transparen t'">
<DIV class=c1>16</DIV>
<DIV class=c2>
<DIV class="c2 kp10"></DIV>
<DIV class=c2_2>User</DIV>
</DIV>
<DIV class=c3>Platzierung</DIV>
<DIV class=c4>2300</DIV>
<DIV class=c5>63000</DIV>
<DIV class=c6>anzeigen</DIV>
</DIV>
<DIV class=topline onmouseover="this.style.backgroundColor='#084600'" onmouseout="this.style.backgroundColor='transparen t'">

...
..
.
In der originalen vollständigen Liste sind 20 Plätze... oben im code sind 2 Platzierungen als Beispiel.
Extrahiert werden sollen die werte in Zeile: 2,7,8 und in 9 die Zahl hinter javascript:get('

Die Befehle Pos, delete usw sind mir bekannt, aber ich frage mich ob es etwas effektiveres gibt als umständlich mit pos/delete zu arbeiten.
Das Ausgabeformat könnte ein komma getrennter String array werden, so das ich dann auf die einzelnen werte zugreifen kann. Oder hat jemand eine bessere idee?

Wäre nett wenn jemand helfen könnte. Danke.
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#2

Re: Wie am effektivsten aus diesen HTML Code Text parsen ?

  Alt 24. Apr 2010, 10:55
Hi

Delete benötigst Du nicht, nur eine (schnelle) PosEx-Funktion. Die ist in aktuelleren Versionen vorhanden und erweitert die POS-Funktion um die Angabe des Startindexes, ab dem gesucht werden soll.
Prinzipiell gehst Du so vor:
1. Suche "<DIV class=c1>" ab Position P und extrahiere alles nach dem Suchstring bis zum ersten '<'. Setze P auf diese Position. Damit hast Du das erste Datum gefunden und extrahiert.
2. Suche "<DIV class=c4>" ab Position P und extrahiere alles nach dem Suchstring bis zum ersten '<'. Setze P auf diese Position. Damit hast Du das zweite Datum gefunden und extrahiert.
3....
4....
5. Gehe zu 1.


Das wiederholst du, bis die Suche erfolglos war. Fertig.
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
BBoy

Registriert seit: 17. Jan 2007
418 Beiträge
 
Delphi 10 Seattle Professional
 
#3

Re: Wie am effektivsten aus diesen HTML Code Text parsen ?

  Alt 24. Apr 2010, 11:52
ok, danke. Also meine Routine um einen wert zu extrahieren sieht nun so aus:
Delphi-Quellcode:
var
string1 : String;
pos1,pos2 : Integer;
Platz : String;
begin
  memo10.lines.LoadFromFile('.\bearbeiten1.txt');
  string1 := lowercase(memo10.text);
  pos1 := posex('<div id=topcontainer>',string1,1);
  delete(string1,1,pos1);

  pos1 := posex('<div class=c1>',string1,1);
  pos2 := posex('</div>',string1,pos1);
  platz := trim(copy(string1,pos1+14,(pos2-pos1)-14));
end;
Das memo geladen wird usw entfällt später natürlich ist nur zum offline testen.
Ich finde zuerst den begin der eigentlichen topliste und lösche alles davor damit nicht fundstellen vorher schon vorkommen.
Die nächsten 2 Zeilen müsste ich dann für jeden wert den ich extrahieren will wiederholen.

Ist doch dann so ok oder ?
  Mit Zitat antworten Zitat
mjustin

Registriert seit: 14. Apr 2008
3.006 Beiträge
 
Delphi 2009 Professional
 
#4

Re: Wie am effektivsten aus diesen HTML Code Text parsen ?

  Alt 24. Apr 2010, 11:58
Zitat:
1: <DIV class=topline onmouseover="this.style.backgroundColor='#084600'" onmouseout="this.style.backgroundColor='transparen t'">
...
Fast hätte ich einen XML Parser empfohlen (u.a. wegen Sonderzeichen, UTF-8 etc.) - es ist aber leider kein "well formed" XML - schade, schade
Michael Justin
  Mit Zitat antworten Zitat
Benutzerbild von Björn Ole
Björn Ole

Registriert seit: 11. Jul 2008
166 Beiträge
 
Delphi XE Professional
 
#5

Re: Wie am effektivsten aus diesen HTML Code Text parsen ?

  Alt 24. Apr 2010, 14:20
Bin kein Profi, aber vielleicht geht es mittels Regex einfacher?

Delphi-Quellcode:
with TPerlRegEx.Create(nil) do
try
  RegEx := '(?<=>)\d+(?=<)|(?<=javascript:get\('')\d+(?='')';
  Subject := {Source};
  if Match then
  repeat
    AStringList.Add(MatchedExpression);
  until not MatchAgain;
finally
  Free;
end;
Ergebnis für deinen Quote in #1:
Zitat:
15
2200
77000
476
16
2300
63000
476
  Mit Zitat antworten Zitat
Benutzerbild von sx2008
sx2008

Registriert seit: 16. Feb 2008
Ort: Baden-Württemberg
2.332 Beiträge
 
Delphi 2007 Professional
 
#6

Re: Wie am effektivsten aus diesen HTML Code Text parsen ?

  Alt 24. Apr 2010, 17:04
Zum Parsen von HTML mit RegEx gibt es ziemlich negative Meinungen: Parsing HTML the cthulhu way
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#7

Re: Wie am effektivsten aus diesen HTML Code Text parsen ?

  Alt 24. Apr 2010, 19:24
Anhand des Titels würde ich Regex ausschließen. Denn effektiv hat bei mir etwas mit Geschwindigkeit zu tun und da ist die individuelle Lösung klar im Vorteil.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Benutzerbild von jfheins
jfheins

Registriert seit: 10. Jun 2004
Ort: Garching (TUM)
4.579 Beiträge
 
#8

Re: Wie am effektivsten aus diesen HTML Code Text parsen ?

  Alt 24. Apr 2010, 19:37
Zitat von SirThornberry:
Denn effektiv hat bei mir etwas mit Geschwindigkeit zu tun...
Interessant - ich dachte immer, das wäre effizient
(Also für mich ist effektiv = "wird die Aufgabe erledigt?" und effizient="wird sie erledigt, und wieviel kostet das?")
Aber du bist nicht allein:
Zitat:
Wie am effektivsten aus diesen HTML Code Text parsen ?
der Superlativ existiert nicht - entweder ist es effektiv oder nicht
  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 21:22 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz