Entwickler-Ecke

Internet / Netzwerk - Links von HTML Seite auflisten


sky21 - Mo 21.09.09 09:39
Titel: Links von HTML Seite auflisten
Hi all

Kennt jemand eine freeware Komponente, welche aus einer HTML Seite die Links auflistet? Irgendwie so ähnlich wie:

function GetLinkElements(InputHtmlSite : String; out Links : TStringlist) : boolean;

IIdHttp und TWebbrowser scheinen das noch nicht zu können. Da muss es doch schon einen HTML Parser geben; irgendwo, oder?

Danke für eure Hinweise!!


jaenicke - Mo 21.09.09 09:50

Wie wäre es mit einem Blick in die Dokumentation zu TWebBrowser? Da gibts direkt eine Liste der Anchor-Tags.
http://msdn.microsoft.com/en-us/library/aa752583.aspx

Bei IdHttp musst du das selbst parsen bzw. einen der vielen fertigen Parser verwenden.


sky21 - Mo 21.09.09 10:25

Hallo Jaenicke

Den TWebbrowser habe ich mir natürlich auch angeschaut. Aber ich habe "anchor" nicht als "Link" interpretiert. Verwende ich diese englische Bezeichnung, dann wirft mir auch Google wieder allerlei Interessantes zu diesem Thema! Hey, danke vielmals! Ich backe mir jetzt gleich mal ein Tool mit TWebbrowser....


PS: Jetzt verstehe ich auch, was das "a" im <a>Link</a> Tag bedeutet. Herrlich, wenn plötzlich alles doch einen Sinn gibt.


Andreas L. - Mo 21.09.09 10:28

Performanter wirds aber sein wenn du die Seite mit IdHTTP herunterlädst und dann mit Copy, Pos und PosEx parst. Ist auch nicht wirklich viel Aufwand wenn es nur um die Links geht.


sky21 - Mo 21.09.09 12:08

Hallo... ich schon wieder...

Also das TWebbroswer -> 'Anchors' Property scheint zumindest in meinem Fall nicht zu funktionieren. Verwende ich hingegen den allgemeineren Code, dann funktioniert es.



Delphi-Quelltext
1:
2:
// geht nicht (count = 0)
count  := FMyWebbrowserObj.OleObject.Document.Anchors.Length;



Delphi-Quelltext
1:
2:
// geht (count = Anzahl Links)
count  := FMyWebbrowserObj.OleObject.Document.All.Tags('A').Length;


Andere scheinen auch denselben Code zu verwenden. z.B. hier: http://www.delphipraxis.net/post667850.html

So, nochmals ein Blick in die Dokumentation und dort steht dann, dass die Collection nur Anchors mit einem ID und/oder Namen zurück gibt. Aha, meine Beispielseite hat allerdings nur abgespeckte Links (<a href="bla.html">Link</a>). Daher kann hier die Anchors-Collection offenbar nicht verwendet werden. Insofern für mich eine Enttäuschung, aber jetzt mache ich es halt mit dem allgemeinen Zugriff ....

---Moderiert von user profile iconNarses: Beiträge zusammengefasst---

user profile iconAndreas L. hat folgendes geschrieben Zum zitierten Posting springen:
Performanter wirds aber sein wenn du die Seite mit IdHTTP herunterlädst und dann mit Copy, Pos und PosEx parst. Ist auch nicht wirklich viel Aufwand wenn es nur um die Links geht.


Den Aufwand mit TIdHttp ist aber auch nicht zu unterschätzen. Was wäre z.B. bei einer komplexen Frame-Site? Hier müsste mein Tool dann wiederum alle html Seiten einzeln GET'en. Das ist zwar möglich, aber fodert wieder Programmieraufwand auf meiner Seite.


Lannes - Mo 21.09.09 13:10

Hallo,

mit WebBrowser.OleObject.Document.Links bekommst Du Zugriff auf ein Array das alle Links einer HTML-Seite enthält.
Alle Frames und Iframes durchforsten kannst Du, indem Du den (Link) [http://www.delphi-forum.de/viewtopic.php?p=320371#320371] rekursiven Code entsprechend anpasst.