Herzlich willkommen in der Delphi-PRAXiS, Phil - auch wenn du schon eine Weile mitliest.
Die
Unit MSHTML enthält eigentlich alles was du zum Parsen von
HTML-Dokumenten brauchst. So kannst du vorgehen:
(1) Hole das gewünschte
HTML-Dokument aus dem Internet.
Delphi-Quellcode:
function GetDocument(
const uri:
string;
var doc: IHTMLDocument2): Boolean;
var
s: TStream;
begin
Result := False;
s := TMemoryStream.Create;
with TIdHTTP.Create(
nil)
do
try
Get(
uri, s);
Result := LoadDocument(doc, s);
finally
Free;
s.Free;
end;
end;
(2) Besorge dir die gewünschte Table.
Delphi-Quellcode:
function GetTable(doc: IHTMLDocument2; v: 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(v, null)
as IHTMLTable
else REsult := False;
end;
(3) Übernehme die Zellen der Tabelle in ein StringGrid.
Delphi-Quellcode:
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;
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;
Das ist der grobe Rahmen, den du verfeinern kannst. Steckt die Tabelle in einem Frame, dann musst du das Dokument des Frames bereitstellen. Dabei hilft dir sicher die Funktion
GetFrameDoc. Auch die Funktionen
LoadDocument und ProcessMessages findest du hier im Forum. Viel Erfolg.
Freundliche Grüße vom marabu