Delphi-PRAXiS
Seite 1 von 3  1 23      

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)

PeterPanino 13. Apr 2015 00:01

Alle Image-Links aus HTML-String extrahieren (schnell)?
 
Hallo! Was ist die SCHNELLSTE Möglichkeit, um aus einem HTML-Dokument alle Image-Links zu extrahieren? Dabei sollten automatisch auch relative Links verabsolutiert und andere Winkelzüge umschifft werden.

himitsu 13. Apr 2015 00:10

AW: Alle Image-Links aus HTML-String extrahieren (schnell)?
 
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.

PeterPanino 13. Apr 2015 00:28

AW: Alle Image-Links aus HTML-String extrahieren (schnell)?
 
Mhm, kannst du mir bitte erklären, was du damit meinst? Danke.

Popov 13. Apr 2015 01:10

AW: Alle Image-Links aus HTML-String extrahieren (schnell)?
 
Hm, ich kenne eine Möglichkeit, sie ist auch schnell, glaube ich, aber definitiv nicht die Schnellste. Somit fühle ich mich nicht angesprochen. Ich gehe nun schlafen.

PeterPanino 13. Apr 2015 07:56

AW: Alle Image-Links aus HTML-String extrahieren (schnell)?
 
Ich glaube, manchmal sind die einfachsten Lösungen oft die besten. Ich entferne einfach alle Zeilenumbrüche und wende dann einen regulären Ausdruck an, um alle Image-Links zu finden:

Delphi-Quellcode:
function RemoveChars(const S, Chars: string): string; // Chars CaseSensitive;
// http://www.delphipraxis.net/184473-schnellstes-entfernen-von-chars-aus-einem-string-4.html
var
  I, Index: integer;
  Skip: array [Char] of boolean;
begin
  FillChar(Skip[#0], Length(Skip) * SizeOf(Skip[#0]), 0);
  for I := 1 to Length(Chars) do
    Skip[Chars[I]] := true;
  SetLength(Result, Length(S));
  index := 0;
  for I := 1 to Length(S) do
    if not Skip[S[I]] then
    begin
      Inc(index);
      Result[index] := S[I];
    end;
  SetLength(Result, index);
end;

procedure TForm1.btnTestClick(Sender: TObject);
var
  S, L: string;
  ThisImageLinksRegexObj: TRegEx;
  AllImageLinks: TMatchCollection;
  I: integer;
begin
  S := TFile.ReadAllText('R:\Clipboard Text.txt');
  S := RemoveChars(S, #10#13);

  ThisImageLinksRegexObj :=
    TRegEx.Create('https?://\S+\.(png|jpg|gif|bmp|jpeg|jpe|jp2|tiff|tif)',
    [roIgnoreCase]);
  AllImageLinks := ThisImageLinksRegexObj.Matches(S);

  if AllImageLinks.Count > 0 then
  begin
    for I := 0 to AllImageLinks.Count - 1 do
    begin
      L := AllImageLinks[I].Value;
      CodeSite.Send('AllImageLinks[i]', L);
    end;
  end
  else
  begin
    CodeSite.Send('Keine Image-Links gefunden');
  end;
end;

mkinzler 13. Apr 2015 08:13

AW: Alle Image-Links aus HTML-String extrahieren (schnell)?
 
Das findet aber nur absolute Links

uligerhardt 13. Apr 2015 08:16

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

Zitat von PeterPanino (Beitrag 1297405)
Ich glaube, manchmal sind die einfachsten Lösungen oft die besten. Ich entferne einfach alle Zeilenumbrüche und wende dann einen regulären Ausdruck an, um alle Image-Links zu finden:

http://stackoverflow.com/a/1732454/1431618

PeterPanino 13. Apr 2015 08:20

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

Zitat von mkinzler (Beitrag 1297410)
Das findet aber nur absolute Links

Ja, du hast recht.

Sir Rufo 13. Apr 2015 08:20

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

Zitat von mkinzler (Beitrag 1297410)
Das findet aber nur absolute Links

Damit werden auch keine Image-Links gefunden sondern nur Text-Stellen die dem Muster entsprechen. Und das ist etwas völlig anderes.

Darum ist eine RegEx-Suche für so ein Anliegen einfach das falsche Werkzeug oder die Aufgabenstellung ist eine völlig andere.

PeterPanino 13. Apr 2015 08:40

AW: Alle Image-Links aus HTML-String extrahieren (schnell)?
 
Nun gut, Regex ist das falsche Werkzeug, ihr habt mich überzeugt.

Aber bitte, wo gibt es einen HTML-Parser, der das kann? Ich habe bei Google gesucht, aber nichts gefunden.


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:31 Uhr.
Seite 1 von 3  1 23      

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