AGB  ·  Datenschutz  ·  Impressum  







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

Tabelle aus HTML auslesen

Ein Thema von Captnemo · begonnen am 26. Okt 2012 · letzter Beitrag vom 23. Aug 2016
Antwort Antwort
Benutzerbild von Captnemo
Captnemo

Registriert seit: 27. Jan 2003
Ort: Bodenwerder
1.126 Beiträge
 
Delphi XE4 Architect
 
#1

AW: Tabelle aus HTML auslesen

  Alt 26. Okt 2012, 07:57
Die Tabelle ist im Document schon mit den herkömlichen Tags <table>...</table> realisiert. Java/CSS wird nur für das Menü und ein paar Darstellungen verwendet.

Natürlich würde das ggf. auch über copy/paste gehen. Finde ich aber nicht so glücklich, weil ich dann ja immer aufpassen muß, was denn der Anwender mit seiner Maus noch so alles markiert und mit kopiert hat.

Nein, das sollte schon direkt im Quellcode gehen.
Ich kann natürlich auch einfach den Quellcode nehmen, alles rausschmeißen, was ich nicht brauche, die table isolieren und dann das ganze direkt auslesen. Aber ich dachte mir wenn es mit MSHTML besser geht, wäre das ja eleganter.
Nur habe ich damit noch so gar keine Erfahrungen.

Und wie in meinem ersten Post bereits geschrieben, wäre es toll und hilfreich, wenn ich innerhalb der Procedure/Functionen mir die Variablen ansehen könnte. Aber weil das alles nur Pointer sind, weiß ich nicht, wie ich an die dahinter liegenden Daten rankomme.
Dieter
9 von 10 Stimmen in meinem Kopf sagen ich bin nicht verrückt. Die 10. summt dazu die Melodie von Supermario Bros.
MfG Captnemo
  Mit Zitat antworten Zitat
Popov
(Gast)

n/a Beiträge
 
#2

AW: Tabelle aus HTML auslesen

  Alt 26. Okt 2012, 08:06
An für sich ist es nicht so schwer, auch den HTML Code parsen. Ich weiß, dass ich das mindestens schon ein mal ümgesetzt habe, vielleicht sogar als Beispiel hier irgendwo, oder DelphiForum. Demnach müßte es schon hier irgendwo rumliegen. Ich suche mal.
  Mit Zitat antworten Zitat
Popov
(Gast)

n/a Beiträge
 
#3

AW: Tabelle aus HTML auslesen

  Alt 26. Okt 2012, 10:06
Ich hab Just4Fun einen Parser programmiert. Memo1 enthält den ganzen Html-Code, es wird die erste gefundene Tabelle bearbeitet, Ergebnis steht im Memo2. Zwei Probleme gibt es noch: es wird nur nach kleingeschriebenen Tags gesucht, hier muß es noch so umgeschrieben werden, dass Groß-/Kleinschriebung nicht beachtet wird. Dann müssen noch die Umlaute (M&uuml;nchen für München) konvertiert werden.

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);

  function MyPos(Substr: string; S: string): Integer;
  begin
    Result := Pos(Substr, S);
  end;

  function ExtractTagArea(var HtmlCode: String; Tag: String): String;
  var
    p: Integer;
  begin
    Result := HtmlCode;
    p := MyPos('<' + Tag, Result);
    if p > 0 then Delete(Result, 1, p);
    p := MyPos('>', Result);
    if p > 0 then Delete(Result, 1, p);
    p := MyPos('</' + Tag + '>', Result);
    if p > 0 then
    begin
      HtmlCode := Copy(Result, p + Length('</' + Tag + '>'), MaxInt);
      Delete(Result, p, MaxInt);
    end;
  end;

  function TrLineToCsvLine(TrLine, Tag: String): String;
  var
    sTd: String;
  begin
    Result := '';
    while MyPos('<' + Tag, TrLine) > 0 do
    begin
      sTd := ExtractTagArea(TrLine, Tag);
      Result := Result + sTd;
      if MyPos('<' + Tag, TrLine) > 0 then Result := Result + #9;
    end;
  end;

var
  sTmp, sTabelle, sTr: String;
  sl: TStringList;
  s: String;
begin
  sl := TStringList.Create;
  try
    sTmp := Memo1.Lines.Text;
    sTabelle := ExtractTagArea(sTmp, 'table');

    while MyPos('<tr', sTabelle) > 0 do
    begin
      sTr := ExtractTagArea(sTabelle, 'tr');

      s := TrLineToCsvLine(sTr, 'th');
      if Length(s) = 0 then
        s := TrLineToCsvLine(sTr, 'td');

      sl.Add(s);
    end;

    Memo2.Lines.Text := sl.Text;
  finally
    sl.Free;
  end;
end;
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#4

AW: Tabelle aus HTML auslesen

  Alt 26. Okt 2012, 13:49
Und wie in meinem ersten Post bereits geschrieben, wäre es toll und hilfreich, wenn ich innerhalb der Procedure/Functionen mir die Variablen ansehen könnte. Aber weil das alles nur Pointer sind, weiß ich nicht, wie ich an die dahinter liegenden Daten rankomme.
Wo ist da das problem?
a) Du hast
Delphi-Quellcode:
type
  tmyarray : array [0..2] of byte;
var
  poptr= ^myarray;
mit poptr^ werden im Debugger 3 Byte angezeigt.

b) Du hast einen "nackten" Pointer
Delphi-Quellcode:
type
  tmyarray : array [0..2] of byte;
var
  poptr= pointer;
dann erhälst Du mit myarray(poptr^)[0] das erste Byte von der Adresse auf die der Pointer zeigt, und mit integer(poptr^) den wert der gleichen Speicheradresse als Integer.
Das Funktioniert natürlich auch mit anderen Typen.

Gruß
K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
Benutzerbild von Captnemo
Captnemo

Registriert seit: 27. Jan 2003
Ort: Bodenwerder
1.126 Beiträge
 
Delphi XE4 Architect
 
#5

AW: Tabelle aus HTML auslesen

  Alt 29. Okt 2012, 08:01
Komme leider mit den Beispielen nicht weiter. Der Grund wird sein, dass die Seite aus der ich die Daten auslesen muß Frames verwendet. Das wäre ja nicht so schlimm, denn es gibt ja einige Beispiele, die beschreiben wie man den Inhalt der Frameset ausliest.
Nur blöderweise verwendet die Webseite verschachtelte Framesets. Und ich komme da einfach nicht ran. Bei allen Möglichkeiten, die ich ausprobiert habe, komme ich immer nur zum ersten Frameset, aber nicht an die in der Tiefe.
Als Anlage mal ein Bild, wenn ich im Internetexplorer mir das mit den Entwicklertools anzeigen lassen.

Kann mir jemand helfen, wie ich da ran komme?
Angehängte Grafiken
Dateityp: jpg htmlseite.jpg (156,9 KB, 35x aufgerufen)
Dieter
9 von 10 Stimmen in meinem Kopf sagen ich bin nicht verrückt. Die 10. summt dazu die Melodie von Supermario Bros.
MfG Captnemo
  Mit Zitat antworten Zitat
Benutzerbild von Captnemo
Captnemo

Registriert seit: 27. Jan 2003
Ort: Bodenwerder
1.126 Beiträge
 
Delphi XE4 Architect
 
#6

AW: Tabelle aus HTML auslesen

  Alt 31. Okt 2012, 07:05
Weil ich keine Lösung für mein Problem gefunden habe, bin jetzt dazu übergegangen mir einfach den im TWebbrowser angezeigten Text in einen String zu kopieren und suche mir die gewünschten Werte dort raus. Zum Glück werden ja alle benötigten Daten auch direkt auf der Webseite angezeigt.
Dieter
9 von 10 Stimmen in meinem Kopf sagen ich bin nicht verrückt. Die 10. summt dazu die Melodie von Supermario Bros.
MfG Captnemo
  Mit Zitat antworten Zitat
Caps

Registriert seit: 23. Mär 2006
Ort: Leipzig
299 Beiträge
 
#7

AW: Tabelle aus HTML auslesen

  Alt 31. Okt 2012, 08:43
Hi,

eine Möglichkeit, die ich mir noch vorstellen könnte, wäre, dass Du die Seite, die in das Frame geladen wird, direkt lädst und dann Deine ursprüngliche Vorgehensweise auf diese Seite anwendest.
Du bekommst doch vom Browser entweder nur den Quelltext für das Frameset (ohne Inhalte) oder die Quelltexte für jeden Frame einzeln, also eigentlich nix anderes oder?

Grüße
Caps
"Der Mode cmCFS8 ist prohibitär und von mir entwickelt."
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#8

AW: Tabelle aus HTML auslesen

  Alt 31. Okt 2012, 12:00
Schau doch mal, ob du den Tabelleninhalt mit dem angehängten Programm zugreifen kannst.

Das Document beinhaltet nur den Verweis auf den Frame aber nicht den Inhalt.
Das Document hat aber eine Liste mit allen Frames und darüber kannst du dir auch den Frameinhalt holen.

Allerdings hast du hier 2 Frames verschachtelt.

Also von Document das Frame(1) holen.
Aus dem Frame(1) das Frame(2) holen.
Aus dem Frame(2) die Tabelle(1) mit id "table1" holen.
Aus der Tabelle(1) die Tabelle(2) mit id "table1" holen.
Aus der Table(2) das Element "tbody" holen und der Inhalt hat deine gewünschten Daten.

Bei dem Programm auf dem "Browser"-Tab oben im Edit die Webadresse eingeben und ENTER.
Dann auf den "Analyzer"-Tab und "Untersuchen" klicken.
Angehängte Dateien
Dateityp: zip MSHTML_Tools.zip (867,5 KB, 35x aufgerufen)
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Frank2004

Registriert seit: 2. Jul 2004
Ort: Deutschland
4 Beiträge
 
Delphi 2010 Professional
 
#9

AW: Tabelle aus HTML auslesen

  Alt 23. Aug 2016, 13:48
Hallo Sir Rufo,
wäre es möglich den Quellcode des Progs "mshtml_tools" zu bekommen. Ich muss hier eine Internetseite befüllen und ich finde einfach keinen funktionierenden Weg. In Deinem Tool werden aber die Controls die ich suche angezeigt.

Vielen Dank und Gruß
Frank
  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 02:47 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