Ich möchte HTML-Dokumente parsen und bestimmte Inhalte des Dokuments in jeweilige Zellen schreiben. Mein Tabellenblatt baut sich wie folgt auf:
Die Meta-Description (und leicht abgewandelt auch den Title) bekomme ich mit folgendem Code problemlos ausgelesen:
Public Function SeoDescription(uri As String) As String
Dim dummy As HTMLDocument, dok As IHTMLDocument2
On Error Resume Next
Set dummy = New HTMLDocument
Set dok = dummy.createDocumentFromUrl(uri, "")
Do While Not dok.readyState = "complete"
DoEvents
Loop
SeoDescription = dok.getElementsByTagName("meta").Item("Description").Content
dummy.Close: Set dummy = Nothing
dok.Close: Set dok = Nothing
End Function
Probleme bereitet mir jedoch das Auslesen der href-Angabe bei einem Canonical-Tag. Aufbau dessen ist: <link rel="canonical" href="www.example.org">. Die Position dieses Nodes kann im HTML natürlich überall im <head> sein und "link"-Tags gibt es meist zuhauff.
Mit diesem Code zeigt mir die Zielzelle der Funktion zumindest an, dass er ein oder mehr Elemente des Typs "link" findet. Wenn ich hier noch .Item[0].href angebe, dann bekomme ich sogar den href des ersten <link>-Elements. Aber ich möchte den href-Wert eben nicht abhängig der Node-Zahl auslesen, sondern davon abhängig, dass das Attribut "rel" des Tags "Link" den Wert "Canonical" hat.
Public Function SeoMetaCanonical(uri As String) As String
Dim dummy As HTMLDocument, dok As IHTMLDocument2
On Error Resume Next
Set dummy = New HTMLDocument
Set dok = dummy.createDocumentFromUrl(uri, "")
Do While Not dok.readyState = "complete"
DoEvents
Loop
SeoMetaCanonical = dok.getElementsByTagName("link")
dummy.Close: Set dummy = Nothing
dok.Close: Set dok = Nothing
End Function
Soetwas wie .Attributes.Rel("Canonical").href funktioniert leider nicht, da bleibt die Zelle weiß.
Weiß hier vielleicht jemand Rat?
Ich bedanke mich im Voraus für jede Mühe!
Beste Grüße,
Daniel