Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi Bestimmte Werte aus HTML Quelltext extrahieren (https://www.delphipraxis.net/117164-bestimmte-werte-aus-html-quelltext-extrahieren.html)

goenner90 13. Jul 2008 09:20


Bestimmte Werte aus HTML Quelltext extrahieren
 
hallo,
erstmal wieder ein grosses Lob an die DP(immer wieder schön hier zu sein).

mein Problem ist folgendes, also ich surfe mit dem Twebbrowser eine Seite an, dieser soll von dort dann den Quelltext auslesen und kp in nem strin oder ähnlichem speichern.

Ein auszug des Quelltextes sieht so aus:

Delphi-Quellcode:
  <td width="150" align="center" class="line_2" id="res1">11.043</td>
  <td width="150" align="center" class="line_2" id="res2">954</td>
  <td width="150" align="center" class="line_2" id="res3">55</td>

  <td width="150" align="center" class="line_2" id="res4">2365</td>
nun würde ich gern Delphi dazu überreden, das er mir praktisch die zahlen hinten in einem editfeld abspeichert, bzw in 4 editfeldern. [zuordnen lässt sich das ganze ja durch die ids(also res1-4)];

ich habe leider mit der Vearbeitung von strings bzw dem extrahieren bestimmter stellen eine Erfahrung und wüsste nicht genau wie ich rangehen sollte....

Der Quelltext ist mit einem Frame geschützt.

Ich hoffe auf Hilfe.

MFG goenner90

Blackheart 13. Jul 2008 09:40

Re: Bestimmte Werte aus HTML Quelltext extrahieren
 
Schau mal nach Pos und Copy damit kommst du an die Zahlen die zwischen
>...< stehen.

Nils_13 13. Jul 2008 10:29

Re: Bestimmte Werte aus HTML Quelltext extrahieren
 
Hi,

Regular Expressions
Alle Links einer HTML-Datei filtern
(du willst zwar keine Links filtern, aber an dem Beispiel sollte man sehen können, wie das ganze funktioniert)

goenner90 13. Jul 2008 11:00

Re: Bestimmte Werte aus HTML Quelltext extrahieren
 
jo ich werd mir das erstmal anschauen, mal sehen ob Toms mein Mentor dazu noch was sagt.

marabu 13. Jul 2008 16:28

Re: Bestimmte Werte aus HTML Quelltext extrahieren
 
Hi,

vielleicht hilft dir das weiter:

HTML Tabelle einlesen

Grüße vom marabu

Edit: Beim Link topic105466html fehlte der Punkt ...

goenner90 13. Jul 2008 16:35

Re: Bestimmte Werte aus HTML Quelltext extrahieren
 
@ marabu da komm ich immer auf folgenden topic: PRogrammier-Gruppe (also wenn ich den Link anklicke...

hoffen auf Toms....

Blackheart 13. Jul 2008 16:39

Re: Bestimmte Werte aus HTML Quelltext extrahieren
 
Zitat:

Zitat von goenner90
jo ich werd mir das erstmal anschauen, mal sehen ob Toms mein Mentor dazu noch was sagt.

Zitat:

Zitat von goenner90
@ marabu da komm ich immer auf folgenden topic: PRogrammier-Gruppe (also wenn ich den Link anklicke...

hoffen auf Toms....

Wenn Du von anderen keine Tipps annehmen möchtest warum schreibst du ihn keine PN. :wink:

marabu 13. Jul 2008 16:47

Re: Bestimmte Werte aus HTML Quelltext extrahieren
 
Zitat:

Zitat von goenner90
... da komm ich immer auf folgenden topic: PRogrammier-Gruppe ...

Ich habe dir noch den Punkt in den Link eingefügt.

goenner90 13. Jul 2008 19:44

Re: Bestimmte Werte aus HTML Quelltext extrahieren
 
Zitat:

Zitat von Blackheart
Wenn Du von anderen keine Tipps annehmen möchtest warum schreibst du ihn keine PN. :wink:

das sage ich ja net, aber oft hat er schon iwelche funktionen gebastelt, welche er dann nur noch postet und viele posts von ihmhaben schon geholfen, ich bedanke mich natürlich auch für euren Rat, konnte damit leider noch niochts zustande bringen -.-'

mfg goenner90

PS: ausserdem will ich ihm keine Pn schreiben weil wenn er den Thread liest und meint antworten zu müssen wird er es schon machen.

mkinzler 13. Jul 2008 19:47

Re: Bestimmte Werte aus HTML Quelltext extrahieren
 
Also Achims Antworten kannst du ohne Zweifel vertrauen. Er ist ein mindest genauso großer Fachmann in Sachen mshtml wie toms

c.wuensch 13. Jul 2008 21:42

Re: Bestimmte Werte aus HTML Quelltext extrahieren
 
Mal ne etwas andere Idee:
Muss es denn unbedingt aus dem Quelltext extrahiert werden? Wenn du das Ganze schon im TWebbrowser geöffnet hast, dann kannst du wunderbar über die HTML-DOM-Struktur auf die einzelnen Objekte des Dokuments zugreifen.

So kannst du z.B. ganz einfach den Titel der Webseite verändern (oder auslesen):
Delphi-Quellcode:
uses MSHTML;
var s: String;
...
s := IHtmlDocument2(Webbrowser1.Document).Title;
IHtmlDocument2(Webbrowser1.Document).Title := 'Neuer Titel';
Und für alle anderen Objekte und deren Attributwerte ist das ebenfalls möglich (hab mich damit mal länger beschäftigt, finde das aber im Moment nicht...)

toms 14. Jul 2008 06:25

Re: Bestimmte Werte aus HTML Quelltext extrahieren
 
Hallo, folgender Code basiert auf marabus Code.
Musst natürlich den Code noch etwas umschreiben, da du ja die Daten nicht in ein Stringgrid übertragen möchtest.

Delphi-Quellcode:
uses MSHTML;

// IHTMLDocument2 eines Frames ermitteln
function GetFrameDoc(doc: IHTMLDocument2; v: OleVariant): IHTMLDocument2;
var
  win: IHTMLWindow2;
  u: IUnknown;
begin
  u := doc.frames.item(v);
  if Assigned(u)
  and Succeeded(u.QueryInterface(IHTMLWindow2, win))
    then Result := win.Document
    else Result := nil;
end;

// IHTMLTable nr. iTableNr eines IHTMLDocument2 ermitteln
function GetTable(doc: IHTMLDocument2; iTableNr: OleVariant; var t: IHTMLTable): Boolean;
var
  ec: IHTMLElementCollection;
  e2: IHTMLElement2;
begin
  Result := True;
  e2 := doc.body as IHTMLElement2;
  ec := e2.getElementsByTagName('table');
  if ec.length > 0 
    then t := ec.item(iTableNr, null) as IHTMLTable
    else REsult := False;
end;

// Zellen einer Zeile in ein Stringgrid übertragen
procedure GetCells(tr: IHTMLTableRow; sg: TStringGrid; index: Integer);
var
  i: Integer;
  ec: IHTMLElementCollection;
  e: IHTMLElement;
  s: TStrings;
begin
  s := sg.Rows[index];
  s.Clear;
  ec := tr.cells;
  if sg.ColCount < ec.Length then
    sg.ColCount := ec.length;
  for i := 0 to Pred(ec.length) do
  begin
    e := ec.item(i, null) as IHTMLElement;
    s.Add(e.innerText);
  end;
end;

// IHTMLTable in Stringgrid übertragen
procedure GetRows(t: IHTMLTable; sg: TStringGrid);
var
  i: Integer;
  ec: IHTMLElementCollection;
begin
  ec := t.rows;
  sg.RowCount := ec.length;
  for i := 0 to Pred(ec.length) do
    GetCells(ec.item(i, null) as IHTMLTableRow, sg, i);
end;

procedure TForm1.Button2Click(Sender: TObject);
var
 iDoc2 : IHTMLDocument2;
 itable: IHTMLTable;
 row: IHTMLTableRow;
 i: Integer;
begin
  if assigned(Webbrowser1.Document) then
  begin
    iDoc2 := Webbrowser1.Document as IHTMLDocument2;
    if Assigned(iDoc2) then
    begin
      iDoc2 := GetFrameDoc(iDoc2, 1); // IHTMLDocument2 von frame Nr. 1 ermitteln
      if Assigned(iDoc2) then
      begin
        if Assigned(iDoc2) then
        if GetTable(iDoc2, 0, itable) then // erste Tabelle
          begin
            GetRows(itable, Stringgrid1);
          end;
      end;
    end;
  end;
end;


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:25 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