使用VBA从源代码中提取href链接

时间:2019-11-10 10:19:15

标签: excel vba

下面是浏览网站后得到的源代码

<item><a href="/search/Listing/45678489?source=results" id="mk:0:mk" class="details">

我只想复制/ search / Listing / 45678489?source = Excel中的结果并想知道如何单击它

class =“ details”对于我要复制的所有href链接都是相同的,而id继续增加mk:1:mk,ms:2:mk等

2 个答案:

答案 0 :(得分:0)

如果该字符串始终像您发布的一样,并且您希望在/search/Listing/45678489?source=results之后得到字符串<item><a href=,则可以使用以下代码

Option Explicit

Function ExtractIt(inp As String) As String

    Dim v As Variant
    v = Split(inp, Chr(34))
    ExtractIt = v(1)

End Function

Sub TestIt()
    Dim inp As String
    inp = "<item><a href=""/search/Listing/45678489?source=results"" id=""mk:0:mk"" class=""details"">"

    Debug.Print ExtractIt(inp)

End Sub

代码假定inp始终以<item><a href=开头,然后我们在"之间建立了链接。

答案 1 :(得分:0)

因此,在每个页面上,您都可以在列表中收集当前的链接集,但是在上面的示例中,您需要先将协议/域连接到url,然后才能写出Excel。我不会尝试单击那些写出的链接(可能是超链接),因为这样做效率低下,并且会产生许多IE实例,您需要记住要手动关闭它们。

在任何给定页面上,获取链接列表并在每种情况下生成完整的URL

Dim nodes As Object, i As Long

Set nodes = ie.document.querySelectorAll(".details[id^='mk:']")

With ActiveSheet
    For i = 0 To nodes.Length -1
        .Cells(i+1,1) = "protocol + domain...." & nodes.item(i).href
    Next
End With

然后,而不是单击,将这些URL读入一个数组,循环该数组,并在可能的情况下发出xmlhttp requests.Navigate with IE to the current url in the array