AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Delphi Alle Image-Links aus HTML-String extrahieren (schnell)?
Thema durchsuchen
Ansicht
Themen-Optionen

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

Ein Thema von PeterPanino · begonnen am 13. Apr 2015 · letzter Beitrag vom 14. Apr 2015
Antwort Antwort
Seite 2 von 3     12 3      
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.542 Beiträge
 
Delphi 11 Alexandria
 
#11

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

  Alt 13. Apr 2015, 08:48
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.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
PeterPanino

Registriert seit: 4. Sep 2004
1.451 Beiträge
 
Delphi 10.4 Sydney
 
#12

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

  Alt 13. Apr 2015, 15:23
DIHTMLParser ist für meinen Zweck zwar ein überdimensioniertes Monster, aber es löst relative Links mit Hilfe seines Links-Plugins auf.
  Mit Zitat antworten Zitat
Benutzerbild von milos
milos

Registriert seit: 14. Jul 2008
Ort: Bern (CH)
508 Beiträge
 
Delphi 11 Alexandria
 
#13

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

  Alt 13. Apr 2015, 23:15
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
  Mit Zitat antworten Zitat
Benutzerbild von milos
milos

Registriert seit: 14. Jul 2008
Ort: Bern (CH)
508 Beiträge
 
Delphi 11 Alexandria
 
#14

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

  Alt 14. Apr 2015, 00:27
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
Miniaturansicht angehängter Grafiken
pxtz.jpg  
Angehängte Dateien
Dateityp: zip ImgPathParser.zip (968,4 KB, 11x aufgerufen)
Milos

Geändert von milos (14. Apr 2015 um 00:30 Uhr)
  Mit Zitat antworten Zitat
Dejan Vu
(Gast)

n/a Beiträge
 
#15

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

  Alt 14. Apr 2015, 06:06
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.
  Mit Zitat antworten Zitat
PeterPanino

Registriert seit: 4. Sep 2004
1.451 Beiträge
 
Delphi 10.4 Sydney
 
#16

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

  Alt 14. Apr 2015, 08:11
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?
  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
 
#17

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

  Alt 14. Apr 2015, 08:18
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
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)

Geändert von Sir Rufo (14. Apr 2015 um 08:21 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.149 Beiträge
 
Delphi 12 Athens
 
#18

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

  Alt 14. Apr 2015, 08:34
Nee, das Schnellste und auch das Zuverlässigste hatte ich bereits in #2 genannt (siehe Oder), aber da hört ja niemals jemand drauf.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  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
 
#19

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

  Alt 14. Apr 2015, 08:57
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
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.
Mhm, kannst du mir bitte erklären, was du damit meinst? Danke.
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
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.149 Beiträge
 
Delphi 12 Athens
 
#20

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

  Alt 14. Apr 2015, 09:56
Diese Frage wurde doch von den Anderen schon beantwortet.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 3     12 3      

 

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 07:59 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