Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi memo komponente untersuchen (ein html code) (https://www.delphipraxis.net/116105-memo-komponente-untersuchen-ein-html-code.html)

andiak2 23. Jun 2008 16:01


memo komponente untersuchen (ein html code)
 
Gibt es zufällig/ hat jemand so ein delphi programm geschrieben? Wo eine memo komponente untersucht wird?

Ich habe nämlich mittels Indy-komponenten mir ein programm gebastelt womit ich mir den html code einer seite anschauen kann.

Bisher einzige funktion die html seite local abzuspeichern...

ich würde gerne noch sachen wie bestimmte html codes rausfiltern und eventuell bilder (<img src")
per klick runterladen....



also bisher habe ich einmal dadurch wird die in Edit1.Text eingegeben url in das memo feld geladen
Delphi-Quellcode:
procedure TForm1.BTestClick(Sender: TObject);
var s : string;
begin
  s := IdHTTP.Get(Edit1.Text);
  Memo.Lines.Text := s;
end;
Und hiermit kann ich die seite als html datei speichern
Delphi-Quellcode:
procedure TForm1.BMiyClick(Sender: TObject);
var s : TFileStream;
    filename : TFileName;
begin
  if SaveDialog.Execute() then
  begin
    filename := SaveDialog.FileName;
    try
      s := TFileStream.Create(filename,fmCreate);
      IdHTTP.Get(Edit1.Text,s);
    finally
      s.Destroy;
    end
  end
end;

Mordilion 23. Jun 2008 16:12

Re: memo komponente untersuchen (ein html code)
 
Du brauchst folgende Funktionen (die in Delphi enthalten sind) um soetwas zu realisiere:

- Hier im Forum suchenPos
- Hier im Forum suchenPosEx (Müsste vielleicht auch selbst geschrieben werden. Kommt auf deine Delphi-Version an)
- Hier im Forum suchenCopy

Damit solltest du schonmal sehr weit kommen. :)


Gruß
Mordi

andiak2 23. Jun 2008 16:17

Re: memo komponente untersuchen (ein html code)
 
also

function Pos(Substr: <a href; S: Memo1): Integer;

so?

Sucht er damit in dem String Memo1
nach dem teilstring "<a href" ?
muss ich vorher substr und S noch als string bestimmen oder sind das eigenschaften von Pos ?

Mordilion 23. Jun 2008 16:26

Re: memo komponente untersuchen (ein html code)
 
Um mittels Pos im Memo zu suchen, musst du Pos wie folgt verwenden:

Delphi-Quellcode:
var
  iPos: Integer;
begin
  {...}
  iPos := Pos('<a href', Memo1.Lines.Text);
  {...}
end;
Damit bekommst du dann die Position des ersten Zeichens deines SubStrings.


Gruß
Mordi

marabu 23. Jun 2008 16:33

Re: memo komponente untersuchen (ein html code)
 
Hallo ihr beiden,

selbstverständlich kann man mittels Pos() und Copy() auf beliebige Texte zugreifen, aber hier handelt es sich um HTML. Für HTML-Dokumente gibt es einen speziellen Parser, den man über die Unit MSHTML einbinden kann. Als ersten Schritt übergibt man den aus dem Netz oder von der Platte geladenen markup text an den Parser und lässt sich ein document object model (DOM) erstellen:

Delphi-Quellcode:
uses
  Mshtml;

function CreateDocument(const markup: string): IHTMLDocument2;
var
  doc: OleVariant;
begin
  Result := CoHTMLDocument.Create as IHTMLDocument2;
  doc := Result;
  doc.Open;
  doc.Write(markup);
  doc.Close;
end;
Mit den Schnittstellen aus der Unit MSHTML kann man dann recht einfach auf die verschiedenen Tags zugreifen:

Delphi-Quellcode:
procedure ExtractLinks(doc: IHTMLDocument2; s: TStrings);
var
  ec: IHTMLElementCollection;
  e: IHTMLElement;
  i: integer;
  url: Variant;
begin
  ec := doc.links;
  for i := 0 to Pred(ec.length) do
  begin
    e := ec.item(i, 0) as IHTMLElement;
    url := VarToStr(e.getAttribute('href', 0));
    if url <> '' then
      s.Add(url);
  end;
end;
Freundliche Grüße

mquadrat 23. Jun 2008 16:35

Re: memo komponente untersuchen (ein html code)
 
Wenn man tatsächlich über das Suchen in der Zeichenkette gehen will lohnt ein Blick auf Regular Expressions. Damit lässt sich HTML sehr viel schöner auseinandernehmen als via Pos und Copy.

Balu der Bär 23. Jun 2008 16:41

Re: memo komponente untersuchen (ein html code)
 
Es gibt auch fertige Komponenten dafür, nennt sich dann HTMLParser. Mal bei torry.net suchen. ;)


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