从网站源代码中提取特定的变化元素

时间:2016-01-04 13:56:31

标签: excel vba excel-vba

我正在尝试从网站中提取特定链接,但我无法进入字符串。

我必须从一个网站搜索大约5000家公司,所有链接都各不相同。一个示例公司(诺基亚)的源代码的链接是这样的:view-source:http://finder.fi/yrityshaku/Nokia+oyj这是我正在看的部分:

<div class="itemName">

  <!-- Yritysnimi -->

    <!-- Aukeaa aina yhteystiedot-vÃ?lilehdelle -->
    <a href="/Tietoliikennepalveluja%2C+tietoliikennelaitteita/Nokia+Oyj/TAMPERE/yhteystiedot/159838" class="resultGray">

我想在之间提取子串     

  <!-- Yritysnimi -->

    <!-- Aukeaa aina yhteystiedot-vÃ?lilehdelle -->
    <a href="

" class="resultGray">

这个子字符串会随着我搜索的每个公司而变化,所以我只会知道我想要提取的子字符串周围的字符串。

我尝试过使用browserIE.Document.body.innerHTML

Sub Macro1()

Set browserIE = CreateObject("InternetExplorer.Application")
browserIE.Top = 0
browserIE.Left = 800
browserIE.Width = 800
browserIE.Height = 1200
browserIE.Visible = True




Set ws = ThisWorkbook.Worksheets("Sheet1")

browserIE.Navigate ("http://www.finder.fi/yrityshaku")
Do
DoEvents
Loop Until browserIE.ReadyState = 4

    browserIE.Document.getElementById("companysearchform_query_companySearchTypename").Click
    browserIE.Document.getElementById("SearchInput").Value = "nokia oyj"
    browserIE.Document.getElementById("SearchSubmit").Click
    Application.Wait (Now + TimeValue("0:00:4"))
    codeArea = Mid(V, InStr(V, "<div class=""itemName""> <!-- Yritysnimi --> <!-- Aukeaa aina yhteystiedot-vÃ?lilehdelle --> <a href="""), Len(V))
    Debug.Print codeArea
    theLink = Mid(codeArea, 117, InStr(codeArea, """ class=""resultGray"">" - 1))

End Sub

但是我得到了无效的过程调用或参数

我研究了一些,但我还没有找到合适的解决方案。有些人建议只从源代码中提取一个元素,而其他人则将整个源代码复制到字符串变量中。作为一个不太专业的人,我宁愿将整个代码拉成一个字符串,因为我觉得这样会更容易理解。

原创网站(芬兰语)http://finder.fi/yrityshaku/nokia+oyj

1 个答案:

答案 0 :(得分:2)

您需要找到类名为 itemName 的所有<div>元素。循环遍历这些元素以查找<a>元素并使用第一个元素获取href属性。

Sub Macro1()
    Dim browserIE As Object, ws As Worksheet
    Set browserIE = CreateObject("InternetExplorer.Application")
    browserIE.Top = 0
    browserIE.Left = 800
    browserIE.Width = 800
    browserIE.Height = 1200
    browserIE.Visible = True




    Set ws = ThisWorkbook.Worksheets("Sheet1")

    browserIE.Navigate ("http://www.finder.fi/yrityshaku")
    Do While browserIE.ReadyState <> 4 And browserIE.Busy: DoEvents: Loop

    browserIE.Document.getElementById("companysearchform_query_companySearchTypename").Click
    browserIE.Document.getElementById("SearchInput").Value = "nokia oyj"
    browserIE.Document.getElementById("SearchSubmit").Click
    Do While browserIE.ReadyState <> 4 And browserIE.Busy: DoEvents: Loop
    'Application.Wait (Now + TimeValue("0:00:4"))

    Dim iDIV As Long
    With browserIE.Document.body
        If CBool(.getelementsbyclassname("itemName").Length) Then
            'there is at least one div with the itemName class
            For iDIV = 0 To .getelementsbyclassname("itemName").Length - 1
                With .getelementsbyclassname("itemName")(iDIV)
                    If CBool(.getelementsbytagname("a").Length) Then
                        'there is at least one anchor element inside this div
                        Debug.Print .getelementsbytagname("a")(0).href
                    End If
                End With
            Next iDIV
        End If
    End With

End Sub
  

我通过VBE的工具►参考资料 Microsoft HTML对象库 Microsoft Internet控件添加到项目中。

立即窗口的结果。

http://www.finder.fi/Televiestint%C3%A4laitteita+ja+palveluja/Nokia+Oyj/ESPOO/yhteystiedot/159843
http://www.finder.fi/Tietoliikennepalveluja%2C+tietoliikennelaitteita/Nokia/SALO/yhteystiedot/960395
http://www.finder.fi/Tietoliikennepalveluja%2C+tietoliikennelaitteita/Nokia/TAMPERE/yhteystiedot/853264
http://www.finder.fi/Tietoliikennepalveluja%2C+tietoliikennelaitteita/Nokia/ESPOO/yhteystiedot/2931747
http://www.finder.fi/Tietoliikennepalveluja%2C+tietoliikennelaitteita/Nokia/ESPOO/yhteystiedot/2931748
http://www.finder.fi/Tietoliikennepalveluja%2C+tietoliikennelaitteita/Nokia/TAMPERE/yhteystiedot/835172
http://www.finder.fi/Tietoliikennepalveluja%2C+tietoliikennelaitteita/Nokia+Oyj/TAMPERE/yhteystiedot/159838
http://www.finder.fi/Tietoliikennepalveluja%2C+tietoliikennelaitteita/Nokia+Oyj/SALO/yhteystiedot/159839
http://www.finder.fi/Tietoliikennepalveluja%2C+tietoliikennelaitteita/Nokia+Oyj/TAMPERE/yhteystiedot/159850
http://www.finder.fi/Tietoliikennepalveluja%2C+tietoliikennelaitteita/Nokia+Oyj/TAMPERE/yhteystiedot/159857