Delphi-PRAXiS
Seite 2 von 3     12 3      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Delphi Alle Image-Links aus HTML-String extrahieren (schnell)? (https://www.delphipraxis.net/184662-alle-image-links-aus-html-string-extrahieren-schnell.html)

DeddyH 13. Apr 2015 08:48

AW: Alle Image-Links aus HTML-String extrahieren (schnell)?
 
Der hier z.B. soll es laut Autor wohl können. Evtl. auch interessant: http://sourceforge.net/projects/htmlp/. Und das sind nur 2 der ersten Treffer, die ich unter Bei Google suchendelphi html parser gefunden habe.

PeterPanino 13. Apr 2015 15:23

AW: Alle Image-Links aus HTML-String extrahieren (schnell)?
 
DIHTMLParser ist für meinen Zweck zwar ein überdimensioniertes Monster, aber es löst relative Links mit Hilfe seines Links-Plugins auf.

milos 13. Apr 2015 23:15

AW: Alle Image-Links aus HTML-String extrahieren (schnell)?
 
Schade, dass ich den Thread erst jetzt gesehen habe. Ich schreibe morgen mal nen kleinen Parser - hab in letzter Zeit ziemlich oft damit zu tun, ist ein spannendes Gebiet :)

milos 14. Apr 2015 00:27

AW: Alle Image-Links aus HTML-String extrahieren (schnell)?
 
Liste der Anhänge anzeigen (Anzahl: 2)
Ok, konnte es doch nicht sein lassen und habs schon jetzt gemacht ^^
Bild und Projekt ist angehängt, und die Parszeit ist minimal (0.001s - zusehen im Titel vom Fenster)

Hier die Klasse:
Delphi-Quellcode:
unit ImgPathParser;

interface

uses
  Classes, SysUtils;

type
  TImgPathParser = class
  private
    function FGetImgPath(Index : integer) : string;
    function FGetCount : integer;
  public
    ImgPaths : TStringList;
    procedure Parse(AHTML : string);
    property Count : Integer read FGetCount;
    property ImgPath[Index : integer] : string Read FGetImgPath;
  end;

var
  RealativeLink : string = 'http://www.delphipraxis.net/'; // Um einen Relativen Link generieren zu können.

implementation

{ TImagPathParser }

function TImgPathParser.FGetCount: integer;
begin
  Result := ImgPaths.Count;
end;

function TImgPathParser.FGetImgPath(Index: integer): string;
begin
  Result := ImgPaths[Index];
end;

procedure TImgPathParser.Parse(AHTML: string);
var
  CurrentCharIndex: Integer;
  CurrentChar : Char;
  InString : Boolean;
  Buffer : string;
  Extension : string;
begin
  Buffer := '';
  InString := false;
  ImgPaths := TStringList.Create;

  for CurrentCharIndex := 1 to Length(AHTML) do
  begin
    CurrentChar := AHTML[CurrentCharIndex];

    if (not InString) and
       (CurrentChar = '"') then
    begin
      InString := true;
      Continue;
    end;

    if InString then
    begin
      if CurrentChar = '"' then
      begin
        Extension := LowerCase(Copy(Buffer, Length(Buffer)-2,3));

        // !!! EXTENSIONS !!!
        if (Extension = 'png') or
           (Extension = 'gif') or
           (Extension = 'jpg') or
           (LowerCase(Copy(Buffer, Length(Buffer)-3,4)) = 'jpeg') then
        begin
          if Copy(Buffer, 0, 7) <> 'http://' then
            Buffer := RealativeLink + Buffer;
       
          ImgPaths.Add(Buffer);
        end;

        InString := false;
        Buffer := '';

        Continue;
      end;

      Buffer := Buffer + CurrentChar;
    end;

  end;
end;

end.
Benutzen kannst du sie so:
Delphi-Quellcode:
procedure TForm1.btn1Click(Sender: TObject);
var
  StartTime : TDateTime;
begin
  StartTime := Now;

  ImgPaths.Parse(mmo1.Text);

  Text := FloatToStr(MilliSecondsBetween(Now,StartTime) / 1000) + 's';
end;
Hoffe, das ist in etwa so wie du es brauchst :)

Freundliche Grüsse

Dejan Vu 14. Apr 2015 06:06

AW: Alle Image-Links aus HTML-String extrahieren (schnell)?
 
Das ist kein Parser. Das ist ein "irgendwas-mit-http-vorne-und-jpg-gif-tif-jpeg-hinten-string-extrakt-o-mat'. Der Schleife ist es vollkommen egal, wo sich dieser String befindet.

Allerdings dürfte das trotzdem für die weitaus meisten Anwendungsfälle reichen. Zuverlässig ist das aber nicht.

PeterPanino 14. Apr 2015 08:11

AW: Alle Image-Links aus HTML-String extrahieren (schnell)?
 
Vielen Dank an Milos für seine Idee.

Ein anderer Ansatz: Web-Browser sind doch die besten HTML-Parser, die man sich vorstellen kann. Ist es nicht möglich, die Parsing-Engine eines Web-Browsers für einen beliebigen speziellen Zweck einzusetzen? Gibt es dafür ein Interface?

Sir Rufo 14. Apr 2015 08:18

AW: Alle Image-Links aus HTML-String extrahieren (schnell)?
 
Zitat:

Zitat von PeterPanino (Beitrag 1297599)
Vielen Dank an Milos für seine Idee.

Ein anderer Ansatz: Web-Browser sind doch die besten HTML-Parser, die man sich vorstellen kann. Ist es nicht möglich, die Parsing-Engine eines Web-Browsers für einen beliebigen speziellen Zweck einzusetzen? Gibt es dafür ein Interface?

Ja
Bei Google suchenIHTMLDocument oder Hier im Forum suchenIHTMLDocument
oder die neuere Variante
Hier im Forum suchenIHTMLDocument2

Allerdings ist das nicht wirklich das Schnellste, aber das Zuverlässigste. Evtl. solltest du die Fragen demnächst anders stellen ;)

Eine generelle Regel der Programmierung besagt
Zitat:

  1. Make it work
  2. Make it fast


himitsu 14. Apr 2015 08:34

AW: Alle Image-Links aus HTML-String extrahieren (schnell)?
 
Nee, das Schnellste und auch das Zuverlässigste hatte ich bereits in #2 genannt (siehe Oder), aber da hört ja niemals jemand drauf.

Sir Rufo 14. Apr 2015 08:57

AW: Alle Image-Links aus HTML-String extrahieren (schnell)?
 
Zitat:

Zitat von himitsu (Beitrag 1297603)
Nee, das Schnellste und auch das Zuverlässigste hatte ich bereits in #2 genannt (siehe Oder), aber da hört ja niemals jemand drauf.

Selber schuld, du (er)hörst ja auch seine Frage nicht ;)
Zitat:

Zitat von himitsu (Beitrag 1297385)
Ein HTML-Parser, der die Syntax komplett kennt.
Und dann natürlich noch JavaScript ausführen/analysieren.

Oder man geht den legalen Weg und sucht sich eine ensprechende Schnittstelle zu den gwünschten Daten.

Zitat:

Zitat von PeterPanino (Beitrag 1297386)
Mhm, kannst du mir bitte erklären, was du damit meinst? Danke.


himitsu 14. Apr 2015 09:56

AW: Alle Image-Links aus HTML-String extrahieren (schnell)?
 
Diese Frage wurde doch von den Anderen schon beantwortet. :stupid:


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:15 Uhr.
Seite 2 von 3     12 3      

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