【问题标题】:Scraping current date from website using Excel VBA使用 Excel VBA 从网站上抓取当前日期
【发布时间】:2019-08-20 03:05:38
【问题描述】:

错误

图书馆

我需要当天的日期。我不想将它放在一个变量中以使其能够工作,而是希望该变量是 Date 或其默认字符串。

Sub WEB()

    Dim IE As Object
    Dim allelements As Object

    Application.ScreenUpdating = False
    Set IE = CreateObject("InternetExplorer.Application")

    IE.navigate "http://www.fechadehoy.com/venezuela"
    Do Until IE.ReadyState = 4
        DoEvents
    Loop
    Application.Wait (Now + TimeValue("0:00:01"))
    IE.document.getElementById ("date")
    IE.Visible = True
    Set IE = Nothing
    Application.ScreenUpdating = True

End Sub

网站是http://www.fechadehoy.com/venezuela

我只需要这个页面的日期。我对宏的任何其他元素都不感兴趣。

我只需要提取当前日期并将其放入变量中。

【问题讨论】:

    标签: excel vba web web-scraping


    【解决方案1】:

    如果您需要Lunes, 19 de agosto de 2019,请使用getElementById 代替fecha

    Debug.Print IE.document.getElementById("fecha").Innerhtml
    

    【讨论】:

      【解决方案2】:

      既然 xhr 可以解决问题,为什么还要选择 IE?选择XMLHttpRequest,一眨眼就能知道日期。

      Sub GetCurrentDate()
          Dim S$
      
          With New XMLHTTP
              .Open "GET", "http://www.fechadehoy.com/venezuela", False
              .send
              S = .responseText
          End With
      
          With New HTMLDocument
              .body.innerHTML = S
              MsgBox .getElementById("fecha").innerText
          End With
      End Sub
      

      参考添加:

      Microsoft XML, v6.0
      Microsoft HTML Object Library
      

      完全摆脱该引用:

      Sub GetCurrentDate()
          Dim S$
      
          With CreateObject("MSXML2.XMLHTTP")
              .Open "GET", "http://www.fechadehoy.com/venezuela", False
              .send
              S = .responseText
          End With
      
          With CreateObject("htmlfile")
              .body.innerHTML = S
              MsgBox .getElementById("fecha").innerText
          End With
      End Sub
      

      【讨论】:

      • 它指向我作为错误:“新 XMLHTTP”,我有错误“用户未定义”
      • 我刚刚用另一张图片更新了帖子,你可以检查一下吗?
      • 感谢您的宝贵时间,您的回复对我的项目很有帮助。祝你有美好的一天。
      • 漂亮干净+
      【解决方案3】:

      虽然@Siddharth Rout 给出的答案非常好,但它需要相当多的字符串操作才能以可用的形式获取日期。

      出于上述原因,我提供了一种替代解决方案,它以可直接使用的格式获取日期,以便在必要时进行操作并用于进一步的计算。

      作为奖励,我将演示如何使用 HTTP 请求而不是使用 Internet Explorer 来获取日期。这让代码更有效率。

      Option Explicit
      
      Sub getDate()
      Dim req As New WinHttpRequest
      Dim doc As New HTMLDocument
      Dim el As HTMLParaElement
      Dim key As String
      Dim url As String
      Dim retrievedDate As Date
      url = "http://www.fechadehoy.com/venezuela"
      key = "Fecha actual: "
      
      ''''''''''Bonus: Use an HTTP request to get the date instead of opening IE'''''''''''
      With req                                                                            '
          .Open "GET", url, False                                                         '
          .send                                                                           '
          doc.body.innerHTML = .responseText                                              '
          'Debug.Print .responseText                                                       '
      End With                                                                            '
      '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
      
      For Each el In doc.getElementsByTagName("p")
          If el.innerText Like "Fecha actual*" Then
              retrievedDate = Mid(el.innerText, InStr(el.innerText, key) + Len(key), Len(el.innerText))
          End If
      Next el
      
      End Sub
      

      您需要添加对Microsoft HTML Object LibraryMicrosoft WinHTTP Services version 5.1的引用。为此,请转到 VB 编辑器>工具>参考。

      使用这种格式的日期意味着它可以很容易地被操纵。例如day(retrievedDate)month(retrievedDate)year(retrievedDate) 等函数的使用。

      【讨论】:

      • 添加库,但是不让我执行代码,“类型还没有被用户定义”
      • @EduardoGonzalez 抱歉,我忘记了第二个参考。我更新了我的答案。您还需要引用Microsoft WinHTTP Services version 5.1
      • 感谢您的宝贵时间,您的回复对我的项目很有帮助。祝你有美好的一天。
      • @EduardoGonzalez 很高兴我能帮上忙!
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-21
      • 2020-03-12
      相关资源
      最近更新 更多