如何从网页的源代码中获取特定链接?

时间:2016-12-26 18:13:39

标签: html excel vba excel-vba

我需要一个VBA中的宏,它能够从包含在EXCEL单元格中的URL中提取所有HTML源代码,并在所有不同的Excel单元格中逐行放置。 我以前在网上搜索过不同的解决方案,但找不到合适的解决方案。

感谢您的帮助;)

修改 感谢库插入我还可以测试我以前在网上找到的另一个宏:

Sub Naviga()
Dim texto As String
Dim objIE As Object
Dim DestUrl As String

DestUrl = "http://www.google.it"

    Set objIE = CreateObject("InternetExplorer.Application")
    objIE.Visible = False
    objIE.Navigate2 DestUrl

Do
DoEvents
Loop Until objIE.ReadyState = READYSTATE_COMPLETE

Range("A" & 1).Value = objIE.document.body.innerHTML

End Sub

并且它有效,但不幸的是我希望链接是直接从excel中的单元格获取的,当行复制时,下一行,从下一个单元格开始,下面是单元格。 我该如何修改宏?

编辑2: 解决方案即将来临,我刚刚修复了代码,现在更加干净了:

Sub EstrSorgPag()
Dim IE As Object

    Set IE = CreateObject("InternetExplorer.Application")
    IE.Visible = False
    IE.navigate Range("H1")

Do
DoEvents
Loop Until IE.readyState = READYSTATE_COMPLETE

Range("A" & 1).Value = IE.document.body.innerHTML

End Sub

但缺少宏应按单元格复制内容单元格的最后一部分(A1,A2,A3,A4 ......等等)

编辑3: 大家好,我写了这个简短的代码,从网页的源代码中提取所有链接:

Sub EstraiURLdaWeb()

Dim doc As HTMLDocument
Dim output As Object


Set IE = New InternetExplorer
IE.Visible = False
IE.navigate Range("L1")

Do
    DoEvents
    Loop Until IE.readyState = READYSTATE_COMPLETE

Set doc = IE.document
Set output = doc.getElementsByTagName("a")

i = 5
For Each link In output
    Range("A" & i).Value = link
    i = i + 1

Next

MsgBox "Fatto!"

End Sub

但我需要特别提取这个:

<li class="bubble"><span><a href="/soccer/finland/veikkausliiga/standings/YTtR3YWr/">Main</a></span></li>

我该怎么办?

1 个答案:

答案 0 :(得分:1)

验证<a>的InnerHTML或InnerText

如果您已经获得了所有<a>标记元素,则可以循环遍历它们(您已经拥有它)并创建逻辑条件,如果每个特定元素都包含您要查找的关键字。

Set output = doc.getElementsByTagName("a")

For Each link In output
    If link.InnerHTML = "Main" Then
        Range("A" & i).Value2 = link
    End If
Next

结合更多GetElement(s)方法

要获得更加狭窄的HTML元素集合,您可以组合多个GetElement(s)方法。像这样:

您可以获得具有特定类别的所有HTML elemens:
Set BubbleCollection = doc.getElementsByClassName("bubble")

然后,您可以扫描此集合中的<a>标记:
Set output = BubbleCollection.getElementsByTagName("a")

检查您有多少元素(可选择调试/优化搜索):
Debug.Print output.length